Probably the hardest thing was to know if something get a compile- or a runtime error. I think this is also hard to figure out for very-experienced-java-senior-developer™. The other hard thing was to know all the API-Methods. To be honesty you didn't have to learn so many API-Methods, but they test if you you know the Java-Collection-Api quite well. Yeah and that's the point where my missing every-day-use nearly kills me again. And the collection-stuff was also my worst part in the test (got only 60%). And before I forget, you should really know "everthing" about Java 1.5, probably more then the half of my test was somehow related to it.
But on the other end I did quite well in the multithreading-part. Don't get me wrong, it's not easy! But after surviving marines-like "Parallel- und Netzwerkprogrammieren" (the parallelprogramming-course at my school) nothing about java-threads can anymore surprise me.
For preparation I used the "SCJP Sun Certified Programmer for Java 5 Study Guide" from Kathy Sierra and Berth Bates. The book did a quite well job. It's very well written and sometimes it even makes me laugh (not a bad thing for a tech-book). From time to time the description of some topics (specially when you knew them allready) get a bit longish. But the book describes everything you need to know for the exams and the short self test at the end of the chapter helps to find your weakness. Bye the way, the selftests are harder then the exame itself. The book-cd is a bit a crap, the not very nice looking test program (actually it looks nearly as horrible as the original testcenter interface) runs only on windows. Not the way to go for learning a OS-independent language.
And now 10 things I didn't knew about Java, even I thought I knew everything when I left university (or I have allready forgotten since then, I'm getting old):
- In the case statement you don't have to fully reference your enum (you don't need the type)
- In the For-Each Loop you can not define the loop-variable befor the loop.
- You can use covariant return type, but only in Java 5
- The method with var-args is allways chosen last
- You can not widen and autobox arguments in one step
- You can do "if(a = b)" (yes, with only one equals sign!) As long as both types are boolean.
- binarySearch has the most C-like interface you will find in the Java-API.
- If you have a "private final" method you can "override" it in the subclass. (Well, not really override, but because the private method do not exist in the subclass you can redefine it)
- You can instantiate an inner class from the outside with "new Outer().new Inner();" (Ok, this is one I allready knew. But is still the most weird construct in Java and I think if you see this in really life it might mostly refer to a design flaw.)
- For numberobjects with small numbers (usually bellow 127) java compare the number when you do "==", for bigger numbers java use the object reference. (Do Sun-Engineers smoke Java?)