
This handbook is a quick reference which provides an accelerated introduction to Java for C and C++ programmers who want to learn the language fast. The fourth edition of the handbook covers Java 1.4 beta that differs considerably from Java 1.3.
It's also easier to go up the stack to object oriented languages, particularly Java. The second chapter, first edition, of David Flanagan's Java in a Nutshell is still, in my opinion, the best intro to Java after having some experience with C.
From the 4th edition (which was for Java 1.4), it bulked up from 1 inch thick to 2 inches, and stopped specifically targeting C programmers. It's still good, just not as good. Also, since then, Java has added generics, annotation and several other things. Some of these (esp. generics) have a widespread impact on coding. Also, it doesn't cover the ecosystem. But if you want to start with the basics, it has them.
For an introduction to the basics of the language, in terms of C, the earlier editions can't be beat. (your local university library will have several copies - chapters 2 How Java differs from C and 3 Classes and Objects are what you need)
The original "Java In a Nutshell" - it was dry reading, but at the time is was sooo useful.
C++ Primer Plus by Stephen Prata - this was the book that got me into programing "as a career" so to speak. I picked it randomly off the shelf and it turned out to be foundational :)
There are a small number of excellent Java books. I like the official specification and the books by Arnold and Gosling, Marty Hall, and Peter van der Linden. For reference I like the Java in a Nutshell series and the online references at Sun (I copy the javadoc APIs and the language specification and its amendments to my local disk and bookmark them in my browser so I'll always have fast access.)
One approach I took was to go to the (University) library, and find the section on the programming topic of interest. Then grab a few books, and read a paragraph at random. Then borrow (or read there) the one that appeals to you - the writing style that makes sense to you, that addresses the issues that come to you as you read, that communicates to you. You can do the same at Borders, but the books are more vocational and less textbooky.
If some particular part is unclear, you can compare it with other books - you now have a resource.
Every book has something to offer. The biggest factor is what you put into it. Therefore, it's more important to pick a book that you like rather than the "best" one. Otherwise, you can get into a kind of McCarthyism where there are good books and bad books, instead of each book having strengths and weaknesses.
To put this in perspective, I personally really liked "Java in a Nutshell", because Flanagan's writing is brilliant. It's very succinct, yet covers all the cases, has a joie de vivre about it, and yet is so transparent it's easy to not notice it (Douglas Adam's prose also has this quality). Revealingly, Flanagan loves writing; and is very well read himself. Most writers of programming books are not. Now, to me, being well-written is very pleasing; but I can imagine it not mattering at all to the next programmer.
