Despite the author mentioning it, I could not get through Effective Java. It was well written and informative, but I got the feeling that it mostly taught me about deficiencies of JVM or the language design.
I've always found that knowing the deficiencies of a language is the best way to know the language. Anything that works well should be pretty intuitive and comfortable, but knowing exactly where the trouble spots of a language are let you be aware when you approach them, and know how to handle them.