Some background: I have been programming in Java for over 13 years - since JDK 1.0.2 (warning - time warp). I've used every version of the language, up to and including 1.6. While I don't write code daily anymore, I still spend time coding and consider myself up to date as a programmer. Over these 13 years, I have peaked into the corners of the language from time to time and have read the JLS, books on the VM implementation, and managed to get most (though certainly not all) of the Java Puzzlers. But I never bothered with certification for myself and didn't give much weight to SCJP on a resume.
My prep was pretty minimal. I took two practice exams from Sun one evening to get used to the format and identify trouble areas. I brushed up on the couple areas I fell down on and signed up for an exam the next week. The exam at the test center had some fill-in-the-blank type questions that weren't on the practice tests, but otherwise the material was pretty similar. You learn your exact percentage score and a pass/fail evaluation immediately after clicking the final submit button.
I've got mixed feelings about this exam, and its value as a certification. On the positive side, the exam certainly establishes a credible entry-level bar for Java knowledge. I don't think it'd be possible for a junior developer to pass without having actually used the language for non-toy projects and put in some significant exam prep. I also think the exam will be a bit easier for those with firm CS grounding, rather than coders that learn just enough to solve the immediate problem at hand. (My personal bias is towards those with a CS background, because I think it's easier to learn coding than CS on the job.) This is also a required exam for the other, higher-level Java certifications (which I've yet to take but seem decent.)
The exam topics are a mixed bag to me. Some of the API content is either highly specialized (I hadn't heard of NavigableMap) or the type of stuff most people's IDE (or the online javadoc) gives them. The threading questions were low in level and (in the interest of small code size) often did decidedly odd things to test knowledge about concurrency. Such topics mean that exam-specific study is required and some topics are unlikely to be encountered by developers on a daily or weekly basis.
I have two major objections to the exam. First, there is a ton of what I'll call "are you a compiler?" questions. Many questions are of the form: does the above code (a) not compile do to error at line x, (b) run, but give runtime exception at y, or (c) give output z. Who cares? We have compilers for a reason, and modern IDEs are extremely helpful to the neophyte and seasoned veteran alike. I agree that it's important, for instance, to know that you cannot decrease the visibility of an overridden method in a subclass, but any attempt to do so will cost a developer what, 5 minutes? And finding that error, among other gotchas on question after question is very aggravating. My second objection is that, in order to test specific language features, the example code is full of antipatterns and bad style. Tools like checkstyle and pmd would light up at the code in the exam, pointing out all sorts of problems. As an experienced developer I found it frustrating to have to manually sort that stuff out, and I wouldn't expect a less experienced person to need that knowledge to start coding on any of our teams.