Now class files contain compiled java bytecode, along with a lot of other information. Luckily this is easily decompiled back into a source code form. This can be done because the mapping between java bytecode and java is quite close (one-one as opposed to c and assembler which is more like many-many). Anyway there are many decompilers around and some are better than others. If your decompiler ever fails then simply try a different one. The one I use most of the time is mDeJava v1.0b and I have never really had any problems with it.
It is possible to mess with compiled class files so that decompilers will have a hard time decompiling them, so you may come across variables with very similar names (z,zz,zzz,zz1,zz2,zzx,etc), or funny constructs (jmp l104), just be aware of this. Normally you should be able to recompile an applet fairly easily though.
I haven't put any java or applet reference books at the end of this section because I haven't yet come across anything good enough, if you have any ideas then let me know :) I have however linked to one book which is far more detailed than than the average challenger needs to know, and it is exclusively from the reverse engineering side of things.