There are hundreds of Java books.
Most range from bad to terrible.
Almost all are full of style crime,
and few give any help with designing more complex, longer-lived programs.
Here are the best ones.
General-Purpose
Java in Practice: Design Styles and Idioms for Effective Java,
Nigel Warren and Philip Bishop, Addison-Wesley, 1999.
[not for beginners, but the gold standard for practicing programmers. except for sometimes weak names, no style crime at all.]
Understanding Object-Oriented Programming with Java,
Timothy Budd, Addison-Wesley, 1998.
[an excellent book for beginners marred by several coding style crimes]
Thinking in Java,
Bruce Eckel, Prentice Hall, 1998.
[too tinged with c++ idioms and concerns to be suitable for beginners, but otherwise an excellent book. probably the overall best book on java.]
The Java Programming Language,
Ken Arnold and James Gosling, second edition, Addison-Wesley, 1998.
[the standard in the field, coauthored by java's inventor, james gosling. far too cryptic for beginners though.]
Special-purpose
Cutting-Edge Java Game Programming,
Neil Bartlett, Steve Simkin, and Chris Stranc, Coriolis Group Books, 1996.
[not only a good book on java, but a good book on games too. the book is old however, so it only covers java 1.0]
Patterns in Java: Volume 1: A Catalog of Reusable Design Patterns Illustrated with UML,
Mark Grand, Wiley, 1998.
[required reading for every serious Java programmer.]
Concurrent Programming in Java: Design Principles and Patterns,
Doug Lea, Addison-Wesley, 1997.
[the definitive book on threads in java]
Java in a Nutshell: A Desktop Quick Reference,
David Flanagan, second edition, O'Reilly 1997.
[the best overall reference for the Java APIs. not recommended for its coding style.]