Having already taken two tests in this course, you should be familiar with the kinds of questions likely to be on the final exam. For more specific guidance, the following is offered.
In recent days we discussed the Selection Sort and Insertion Sort algorithms. Given code that implements one of these, plus an array to which it is to be applied, you should be able to give a precise account of what happens during execution. For example, show the contents of the array after each iteration of the main loop.
Near the end of the semester, we discussed recursion. Given a recursive method (i.e., one that calls itself) and value(s) provided to it via its parameter(s), be able to mimic its execution (so as to tell what it prints or what value it returns) and perhaps even apprehend its purpose.
One of the keys to designing such a class is to choose a set of instance variables that, when utilized in tandem, support all the desired capabilities/functionalities of objects of that class. (Such capabilities are those manifested in the public methods of the class). A key, then, to understanding how such objects are able to exhibit their capabilities is to understand how the instance variables are used.
Do not be surprised if there is an exam problem that gauges your understanding of how instance variables are utilized in a Java class that you have encountered in lecture or lab, or one that is similar. For example, you should understand how each of the instance variables of a TossableCoin object contributes to that object's ability to carry out its various operations, and how the values of those variables change as a result of calls to the class's mutator methods.