You are responsible for all of the material up through Widgets and Message Dialogs.
Java Basics Make sure you know how to write a Java program Make sure you understand the differences between C++ and Java Know how to use pointers to create linked data structures Java has no stack-allocated objects, including arrays To create an array of TreeNodes, you must write TreeNode forest[] = new TreeNode[10]; for (i = 0; i < forest.length; i++) forest[i] = new TreeNode(); Java I/O Scanners For reading lines For tokenizing lines (remember to close these scanners) For file I/O (drop a FileReader object into a BufferReader object which in turn is dropped into a Scanner object) String => Number Conversion using Integer.parseInt and Double.parseDouble Garbage Collection Reference Counting Tracing Collectors Mark-sweep Stop-and-copy Generational collectors How to execute a Java program Use the package prefix Use the -sourcepath or -sp flag to tell the compiler where to find packages Use the -classpath or -cp flag to tell the interpreter where to find packages How to create and execute a .jar file 1) Use either the -e flag or a manifest file to declare the entry point 2) Must store packages as directories 3) Use -C flag to "cd" to parent directories of package directories before including the package directory Collection classes Know when it is appropriate to use each type of collection class Know how to sort using the Collections.sort() and list.sort() commands Maps are not part of Collections so know how to convert parts of a Map to a collection 1) entrySet() returns Set<Map.Entry<K,V>> which can be given as a parameter to an ArrayList/LinkedList to create a list of entries. Note that you can iterate over a Set as well--you do not need to create a list for iteration but you might for sorting. 2) keySet() returns Set<K> of keys which can be given as a parameter to an ArrayList/LinkedList to create a list of keys 3) values() returns a Collection<V> which is iterable. Every Collection (e.g., LinkedList, ArrayList, Set, etc) has a constructor that accepts a Collection as an argument and creates the appropriate object from that Collection. Hence any Map's keys, values, or key/value pairs can be converted to any Collection object by using one of the above three commands to get a Collection and then passing the result to the appropriate constructor. Inheritance How to draw an inheritance tree Interfaces versus classes interfaces are declarations of types (specify an API) classes are concrete implementations of types (provide implementation) Types/Subtypes and Classes/Subclasses: Note the relationship between types/classes and also that subinterfaces represent subtypes i. Abstract type: A set of operations only (Stack) ii. type: A set of values + a set of operations (Stack of ints) Virtual methods: Know the difference between virtual, pure virtual, and non-virtual methods i. virtual methods provide an implementation that may be overridden by a subclass ii. pure virtual methods: provide no implementation and hence subclasses must provide an implementation iii. non-virtual method: a method whose implementation must be accepted by all subclasses (i.e., it cannot be overridden) Know Java and C++ syntax for inheritance (abstract, extends, implements, access modifier before each method) C++ Inheritance Issues 1) Initialization lists for constructors and why they are more efficient than assignments in constructor bodies 2) Multiple inheritance a) What it is b) Shared versus replicated inheritance 3) How to inherit implementation but not interface by subclassing using the protected keyword Modules Packages (Java) Namespaces/Friends (C++) void */putting structs in .c rather than .h files to hide implementation (C) Disadvantages of Friends one-way: requires O(n^2) declarations to share implementation among n classes not inherited: subclasses must also be declared friends Java adds package-level access: know the difference between package-level and protected access Generics (Templates) Polymorphism-Parametric versus subtype parametric (templates): same piece of code operates on different types explicit (C++, Java): explicitly provide the type parameters implicit (scripting and functional languages): the runtime environment infers the types of the parameters subtype (inheritance): different piece of code may operate on different types but the behavior must be the same Know how to write a template class in Java and C++ Use void * in C to get generic functions/data structures Template Properties Java C++ C Compilable yes no yes Primitive Types no yes no Java uses type erasure to compile template code: it replaces each type parameter with its upper bound Exceptions Try/throw/catch in Java/C++ use try/catch rather than exit so that stack frames get popped and destructors executed in C++. These destructors can do the appropriate thing with partially completed resources. setjmp/longjmp in C variables stored in registers may be lost volatile variables solve the problem but require a write-through to memory which can jam the processor pipeline know how to write Java and C++ code with exceptions 1) try/catch: try executes error-free code and catch executes error handling code 2) throw: does not have to appear in a try statement, but if it does not, then the exception is thrown out of the function 3) throws declaration: Java requires that exceptions of type Exception be declared as not handled using a "throws" statement if they are not caught by a catch statement. This is true even if the exception is thrown by a called function rather than the function itself 4) finally always executes know the different Java exception classes and what they do 1) Throwable--top-level exception class 2) Error--unrecoverable hardware errors 3) Exception--for user-defined exceptions--these are checked by Java and must either be caught or declared unhandled 4) RuntimeException--the one type of Exception object that does not have to be caught or declared unhandled Graphical User Interfaces/Event Programming 1) Event Programming versus Procedural Programming a) external versus internal control b) distributed versus centralized-control c) need for immediate feedback d) input comes from events rather than console/files e) output is graphics rather than console output/files 2) Presentation and Behavioral Components 3) Widget: A small, interactive, application-independent object that either 1) performs some editing or input task, or 2) displays application state information or describes the input task a) Types of widgets: know when it's appropriate to use the most common types of widgets--radio buttons, check boxes, menus, sliders, spinners, text boxes i) provide informative displays ii) allow user to enter one or more choices from a set of choices iii) allow user to enter a number iv) allow user to enter a text string v) containers that organize/layout collections of widgets b) Design Considerations i) Acquire/Release of screen space to minimize footprint ii) Enable/Disable: Typically gray out disabled widgets rather than removing them so users always know where to look for them iii) Active/Inactive: Always provide feedback when a widget is active iv) Final Feedback: Always provide final feedback when a widget becomes inactive so user sees final result and knows that the interaction is finished