Effective Java by Joshua Bloch
An incredible book. It covers how to program in a series of tips. I refer to it all the time.
Thinking in Java by Bruce Eckel
A great book. It is the most comprehensive introduction to Java. Each example is a complete program.
Java Thread Programming by Paul Hyde
Great book on thread programming. Not thread theory, but how it works in Java code.
Java Concurrency in Practice by Brian Goetz
Fantasic book on threading in Java 5+. It covers all of the new java.util.concurrent classes.
Java Network Programming by Elliotte Rusty Harold
A great introduction to Java's powerful network capabilities. It covers sockets, URL connections, etc. Well written and nice example programs.
Java I/O by Elliotte Rusty Harold
A great introduction to Java's I/O. This book covers all aspects of Java I/O.
Java Servlet Programming by Jason Hunter
The servlet bible. Everything you need to know about servlets...
Web Development with JavaServer Pages by Duane K. Fields, Mark A. Kolb, and Shawn Bayern
A great book on JSPs. It also covers custom tags and tiles.
Graphic Java Vols. 1 & 2 by David M. Geary
Comprehensive introduction to Java GUI programming. The best GUI related books on the market. The first volume covers the AWT, with several great chapters on layout managers. It has incredible coverage of GridBagLayout. The second volume is hands-down the best book written about Swing; it covers everything and it covers it well.
Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides (Gang of Four)
This is the book that changed how object oriented programs are built. It is an incredible book. The examples are in C++, but the text is can be read/applied/understood without the example code.
Refactoring by Martin Fowler
Refactoring is the process of re-coding existing code to make it better. This books does focus on Java, but it can be applied to any programming language.
Applying UML and Patterns : An Introduction to Object-Oriented Analysis and Design and the Unified Process by Craig Larman
This is a great book on OOA&D and the process of creating good code.
Applying Use Cases by Geri Schneider & Jason P. Winters
Use cases are now integral part of the development process. This book does a great job of showing the process from the initial discussion through the creation of the use cases.
Writing Effective Use Cases by Alistair Cockburn
Cockburn is the guru of use cases. This book is the best book on just use cases.
UML Distilled by Martin Fowler & Kendall Scott
A superb concise introduction to UML. Very useful
Algorithms in C++ by Robert Sedgewick
The book on algorithms. Sedgewick covers everything. Many of the algorithms are already implemented by the Java core library (e.g. hashing and binary search), but many are not. There are also Algorithms in Java volumes, but I own the C++ version.