The most thorough and complete book (as well as technically accurate) is "Thinking in Java" 4th edition by Bruce Eckel. There are many other good books, but Eckel is extremely thorough and very clear in his writing. If you decide to pick up this book, make sure to get the 4th edition, as it covers Java 1.5.