Thanks for the encouragement, sometimes I need the help maintaining my morale. As soon as I've passed the test, I'm going to start a serious job hunt. If nothing else, I think that going through this OCPJP experience will get me past a few tech screen interviews. All this intensive review of the basics, and especially of the new generics stuff, has definitely honed my coding skills.
For example, I now know a "stupid Java trick" that allows me to run a class from a java command line without writing a main() method. Just write a call to a static method that kicks off the program inside a static initializer block. The class loader will find the class and run the static initializer before attempting to run the missing main method. You'll get a "NoSuchMethodError", but the program will run anyhow. Here's some code that demonstrates that:
On the topic of access to more books to help prepare for the test, and more than that, get a deeper understanding of Java, you can get a subscription to Safari Books Online for $23 a month for 10 book access, and $43 for unlimited access. I used to get a free subscription from work, but I got an individual subscription right after the layoff so that I could keep my bookworm habit going. The best thing is, you can search the entire library of more than 10,000 titles for just the information that you need, so you don't have to buy a $60 book and then find out that only a chapter or two turns out to be useful, or maybe even that the book is totally worthless. Here's a link: https://ssl.safaribooksonline.com/subscribe
"Memorizing a lot of the little rules of what you can and can't do" goes beyond challenging, it's a major pain in the butt
. I'm used to Eclipse or RAD taking care of all that stuff and concentrating on getting the business requirements right instead of trying to be a human compiler. But, I guess that's what you have to put up with to pass the test... As far as the rule that you mentioned goes, that "you can't have a static methods in an abstract class", that's actually not the case. Here's an example that compiles and runs, showing that an abstract class can have a static method:
From what I've been able to get through my head, an abstract class can have anything that a concrete class can have, but it cannot be instantiated with the "new" operator, and of course, it can't be made final. If you wanted to do something totally warped, you could even declare a bunch of final public static constants in an abstract class and use the abstract class like an interface.
Well, that's it for now. I hope you're having a happy New Year's day, and that the year will bring good things and prosperity to all of us laboring, or hoping to go back to laboring, in the IT vineyard. May there be better times ahead for us all!