I feel I would be much more effective in Clojure (and consequently, the Java ecosystem) if I spent some time with Java, or were at least more familiar with it. With the wealth of Java books, it is a bit intimidating to choose one...<p>So HN: What would be a good Java book for a Clojurian with a solid OO background, but no Java experience?
There are probably more than my recommendation of the Goetz book. Most of the topics that will be relevant from a Clojure perspective boil down to (in no particular order):<p>- Classpath<p>- Classpath<p>- Swing API calls<p>- Classpath<p>- Maven<p>- Exceptions<p>- Interfaces<p>- Primitives<p>- Arrays<p>- Collections framework<p>- and Classpath<p>Did I miss anything?
Effective Java (2nd Edition) by Joshua Bloch: <a href="http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683/" rel="nofollow">http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/032...</a><p>It's not for beginner Java programmers, but if you have experience in other similar programming languages you may get away with it.
#1. "Java Concurrency in Practice" <a href="http://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601" rel="nofollow">http://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/...</a><p>#2. ... hmm, that might be it.
In addition, can anybody suggest something more along the lines of Jeffrey Richter's CLR via C# for the JVM/Java? CLR via C# covers a wide range of topics about how garbage collection, threading, appdomains, etc. work under the CLR using examples from C#, which I think would be more useful for learning what you need to know about Java and the JVM than your typical Java programming book.
As a long time Java programmer I recommend these two:<p><a href="http://www.amazon.com/ERLANG-Programming-Francesco-Cesarini/dp/0596518188/" rel="nofollow">http://www.amazon.com/ERLANG-Programming-Francesco-Cesarini/...</a><p><a href="http://www.amazon.com/Programming-Erlang-Software-Concurrent-World/dp/193435600X/" rel="nofollow">http://www.amazon.com/Programming-Erlang-Software-Concurrent...</a><p>Okay, just kidding. =)<p>On a serious note, Effective Java is one of the best out there.
I picked these because the big box book resellers stock them (I think you're looking for background on things like primitives/autoboxing, java.util.concurrent, the JVM's startup options, profiling/debug tools, and maybe tips that make rhickey's clojure source easier to read):<p><a href="http://www.amazon.com/Core-Java-TM-I-Fundamentals-8th/dp/0132354764/" rel="nofollow">http://www.amazon.com/Core-Java-TM-I-Fundamentals-8th/dp/013...</a><p><a href="http://www.amazon.com/Java-Good-Parts-Jim-Waldo/dp/0596803737/" rel="nofollow">http://www.amazon.com/Java-Good-Parts-Jim-Waldo/dp/059680373...</a>
The Java Tutorials are great for people new to the Java Platform:
<a href="http://download.oracle.com/docs/cd/E17409_01/javase/tutorial/index.html" rel="nofollow">http://download.oracle.com/docs/cd/E17409_01/javase/tutorial...</a><p>Of course, the focus is the Java language... but there are lots of practical examples.