So yesterday I passed the OCAJP 8 exam with 81%. I'm very satisfied with this result, considering the circumstances: I work full-time, so I woke up every day at 1 to study the entire night, and then went to work. Also, I only had six weeks to prepare, and I only have a few months of experience with Java.
First I'd like to thank everyone at this forum who has helped me: Roel, Jeanne, João, Paul, Henry and Jesper. I may have forgotten someone, for which I apologize in advance. When I found this forum, I expected I'd post a few questions and get sorta helpful-ish replies, but what I got was so much more than that: new insights, interesting discussions and extremely helpful advice. I'd also like to thank Mala for her fantastic book.
Here are some of my thoughts on the exam preparation. Please note that this reflects only my experience, and the optimal study plan may entail something very different for everyone.
On writing code. As many others have said: do not use an IDE. An IDE will spot compilation errors for you and automatically generate code for you. You wouldn't be able to properly understand code structures and common reasons for compilation errors. Writing code in a simple text editor challenges you to really think about what you're writing. I used plain ol' Notepad to write code. It was a drag at first, but very quickly I got used to it.
On writing code. I wrote code snippets by hand every now and then. Not entire pages of code, obviously, but simple statements, declarations, assignments and so on. Writing code by hand is slower than typing it, which gives you more time to really consider what you're doing. It forces you to go through each step in a live-action manner. Besides, when you write something down, it'll stick in your memory much better.
Use the Enthuware exams. I cannot stress this enough. This package is pure gold. All concepts are covered in great details. The exams are very, very challenging. If you do, study and review these exams with great care, it's pretty much impossible to fail the exam. It is very important that you review every question; even the ones you had correct. You may, for example, had a question correct for the wrong reason - this is great for your Enthuware score in itself, but your goal is not getting high scores for the Enthuware exams; your goal is to get a high score on the actual exam. To do so, you need to study each concept thoroughly. Thus, study each Enthuware question, think carefully about why you had a question wrong (or right!) and read the explanation.
I recommend manipulating the code of the questions, and try out different combinations. For example: 'what happens if I turn method X into a static method? Or what happens if I cast this integer to a long? I expect so and so to happen, let's see if it does'. Then run the code, and be amazed. If your expectation was correct: great, now try more combinations. Include different aspects of the exam objectives in your code: exceptions, inheritance, data types, loops, you name it. The actual exam will be testing your understanding of combined concepts as well. You shouldn't just study different concepts in silos. It's very helpful to combine them, it'll really help you understand their mechanics.
Weight of different topics. My next advice may be somewhat controversial. Again: this is what worked for me, you have to decide yourself what your strategy is. Since I had limited time, I eventually decided to focus on topics that are most important for the exam in terms of quantity: inheritance, exceptions, data types and loop constructs and such. I based this on Enthuware's mock exams, which included lots of questions about these topics. The String/StringBuilder and Date API, on the other hand, were not extensively covered in the mock exams. The same goes for the real exam. I did lose points on these topics though; so I could have invested more time in them. However, If I did, I could have lost a lot more points on other topics. But like I said, this was my own choice. Others on this forum may strongly disagree with this strategy, which would totally make sense.
Summarizing helps, but practice is key. I started out with reading and summarizing Mala Gupta's book. I did all the sample exam questions and the mock exam from the book. I did Enthuware's Foundational Test, and scored 73%. Pretty neat, I'd say. I thought I was ready for Test 1, but I scored only 45%. This showed me that I hadn't practiced enough at all. I had theoretical knowledge, but barely any practical knowledge. I then decided I needed to play around with code a lot more. The moral of this story is: reading and summarizing provides you with a solid foundation, but through practice is how you really start making progress.
Dealing with lots of code. Some questions may contain a full page of code. In case one of the possible answers is 'compilaiton failure', look for a compilation error first. Questions like these are often meant to confuse you, when really the question is about a simple syntax error. Still consider the other possible answers, though! You might be overlooking something.
Lambda questions are pretty much always about syntax. You don't need to know how Lambdas work in detail, let alone even write one from scratch. But make sure you know the Lambda syntax.
Don't get cocky. Some questions may seem very easy. If they do, they're often too easy to be true. Take every question seriously. Take your time for each question, and consider every possible answer.
When studying, use sticky notes. I have probably used hundreds of these. Eventually, they were all over my apartment. I wrote short and simple phrases on them, often even just key words. For example: one of Enthuware's questions required you to know whether Arrays are an Object. I didn't know they were, so I had this question wrong. I wrote the following on a sticky note: 'Array is Object'. This simple yet effective method helps you in two ways: first, like I said before, writing things down by hand helps you remember them. Second, if you put the sticky note somewhere, you'll sometimes glance at it, maybe even accidentally. This reinforces the information into your mind. As I got closer to the exam, I reviewed my sticky notes and put them into different piles: the 'got it' pile (I didn't look at these again), the 'almost got it' pile (need to review these again), the 'far from remembered pile' (important to check these again a few times) and the 'got it, but essential concept' (these notes focus on important concepts that occur often, so I'll check these again a few times). When you go through notes like these, don't just read the note. Imagine what the code or structure might look like. You have seen corresponding code before at this point, so you should be able to visualize how this concept works in action. The sticky note strategy is just another strategy. There are tons of these out there, of course. Just sharing mine.
Last but not least: use this forum to your benefit. This is an amazingly helpful forum. Very knowledgeable people are only a few clicks away. Make sure that you first try to figure out things on your own, though. Simply asking for an answer or an explanation to a question won't teach you anything. Only when you are really stuck or need some additional insight, should you ask a question. Also make sure you provide all the information people need to help you: your source, relevant code, what you have already tried, the problem you're facing and the question(s) you have. Be clear about what you need from others, that's not only respectful towards others, but it'll increase the odds you accomplish what you intended to by starting a topic.
Thanks again everyone for your help! I'm sure I'll be around again at some point, since my next goal will be OCPJP some time in the future.