Rating: 3/4 (Covering a lot of depth and breadth, this is a good book to dive into Java)
The last time I worked with Java, the programming language, was in my undergraduate semester in 2000. I distinctly remember learning the basics of the language and AWT (or was it Swing?) to create a program that drew various kinds of fractals. This month I was back in bed with Java, the language now in version 6. Everything seems to have changed about Java in these past 10 years. With improvements in virtual machines (VM), compilation, garbage collection, addition of Generics and an awesome IDE (Eclipse), Java is today a fast language to learn, program and execute.
I looked around to find a book that would introduce me back to Java. I tried Thinking in Java (4th Edition) by Bruce Eckel and found it simplistic and excessively verbose. Also, it is beyond me why Eckel does not number his book chapters! In his interview, Java demi-god Joshua Bloch suggests the book Java Precisely (2nd Edition) by Peter Sestoft for a terse introduction to Java. Despite it being published by MIT Press, I found this book to be poorly written and the typesetting ridiculously bad to even take it seriously. Finally, I settled on the O'Reilly book Learning Java, now in its 3rd edition, written by Patrick Niemeyer and Jonathan Knudsen. This book, though quite hefty, fit my needs perfectly and I came away discovering a lot about Java.
I found the first 8 voluminous chapters of the book the most useful, since these deal with introducing the language, types, classes, objects and Collections. The rest of the book deals with core classes, threads, I/O, networking, Swing, JavaBeans, applets and XML. The book is quite hefty, weighing in at ~950 pages! The book dives pretty deep into the details of the language and in my opinion, would be comfortable only for readers already familiar with C or C++. Unlike the earlier two Java books I tried, I liked the pace, the content and the writing style of the authors here. Small executable code samples litter the book and can be downloaded from here and executed with Eclipse.
The only problem I had with this book was the high number of errors I discovered while reading it. That was quite surprising, the book coming from the O'Reilly stable and having undergone so many editions! Still, I recommend Learning Java as a good introduction to Java. It is written not to be just an introductory book, but has enough depth and breadth to live on as a handy reference book on Java.