Teach yourself Java 2 in 24 hours --- Good if you want from ground up.
Java 2 Primer Plus -- Excellent book.
J2ee Core Patterns -- Haven't read it yet
Java 1.5, A developers notebook --- Excellent
Java 2 Certification -- Excellent
Head first servlets and JSP -- Excellent(although I haven't read all of it yet)
I liked the certification book and the head first servlets best. Those are jam packed with information.
I've nothing against Microsoft, but the concept of someone from Microsoft who's an expert in their products writing (while a Microsoft employee) a book about a competing product doesn't inspire confidence (it wouldn't have inspired confidence if it were anyone else writing a book about a product from a competing company).
Hf Java is an excellent book. I didn't read all of it but have read others in the series and others by the same authors.
It's designed to be FUN while teaching, causing the material to stick in the mind and inspiring the students.
All books out of the "teach yourself in XXX" series are extremely shallow, not recommended except as an introduction into a topic where you later use other books to get to know that topic.
I'd not recommend them to anyone, except as that, an introduction to see if a topic is worth further study.
Jeff Langr's book is designed (as is HF Java) to be used in a classroom environment as well as for individual study.
As I said I proofread it :)
The JDK 1.5 Developer's notebook is hardly a beginners' book, neither are certification books or pattern catalogues :)
HF Servlets and JSP is also hardly a book for beginning Java programmers. One should learn to swim before attempting the deep ;)
I am completely self-taught in Java, learning as I went along from a huge pile of books.
My first one was actually Java in a Nutshell, 2nd edition (covering Java 1.1), purchased in 1997 when I was sick in a hotel in London and wanted something to do while the family had fun in the theaters and restaurants.
My current library has 30+ books on Java and associated libraries, some more obscure than others.
Well, the book teaches it from the very beginning in the first section. The next section is the complete libraries that Java uses. I have his books for C++/C#/Java, but yeah, I started out with easier books when I first begun. But I still think Schildt's books still taught in the same line besides all the sugar-coated words beginner books have.
Personally, I would recommend "Ivor Horton's Beginning Java2, JDK 5 Edition" - Very tutorial based. I've used many Ivor's language books. They are all easy to read. Tutorials are easy to follow. They can be used as references too.
I learned from Teach Yourself Java 2 in 21 Days. It had a bunch of good examples in it (except one was missing a semicolon :( ) Plus, it started from the basics (i.e. "Copy this code into Notepad and compile it with javac HelloWorld.java" instead of "To create a Java program, you should first initialize the flexural modulus of your JRE to the cosine of the millisecond value in your computers CMOS clock")
I love the teach yourself in x amount of time. I've had a lot of books but most don't do such a great job of learning you the very basics. I've got the C++ in 21 days right now, and that is an excellent book. I think it's important to start out slow with a book like that, even though most people hate them.
Speaking from a newbie point of view, we used Sam's Teach Yourself Java in 24 Hours for my first Java class. That one did a good job of covering the Basics. I also picked up a Schildt book Java: A Beginners Guide. It helped fill in some of the blanks I was coming up with. Unfortunately, it stops before it really gets into anything graphic or GUI. I do not begin to consider myself anywhere in the same ballpark with the rest of these guys, but I thought maybe a newbie opinion might help a tiny bit!
I have read the C++ in 21 days. Its not a very fun (not much humor) book although it mentions a few things that other book don't, list like linked lists! There are a few other things as well.
I have not read any Java books yet (im on OpenGL for now) but I think if you can find a "for dummies book" about java take a serious look at it (all in one desk reference type) I loved reading that book on C++. So I think that a Java counter part would do well too.