Java and Object Oriented Development - a recommended learning path

I don't like those extremely long lists of books or links. You see them at readings on university for example. There they usually consist of a list of all more or less famous books that were ever written about the theme of the reading. When someone from a lower semester asks me which books to use for a certain reading I can only recommend about two books in most cases.
On this page you will only see recommendations for the really good sites / books.

Getting started

Literature

In my opinion there are only two books / tutorials in question.

Tools

Sun JDK, editor (good ones include vim, gvim, emacs, xemacs). For a long time I thought that it were merely harder to learn when one starts with an IDE from the very beginning, but after I observed many people who did so I am sure that it is impossible to ever become good at Java with an IDE from the very beginning. So no Netbeans, Eclipse, Intellij Idea or similar environments until you have some skill. See the FAQ of Tony Morris for details.

Advanced literature

General Java programming

There are many books about Java, but only one is a must-have: "Effective Java" Second Edition by Joshua Bloch. After finishing the appendix of "Thinking in Java" there are basically two ways to go: "Effective Java" or "Design Patterns".
There are many sample chapters available for download. Even those who know the first edition must get the new one!

Object-Oriented Design

One book is a must-have: "Design Patterns" by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides. In my opinion the first chapter is particularly valuable and timeless. Regarding the third chapter, the following design patterns are considered controversial these days, because they compromise with the principles of programming to an interface (see chapter 1) or rely on concrete inheritance (see also my Design Principles article):

The same problem applies to some code samples and flavours of certain patterns.

My two cents about Object-Oriented Design ...

... are found in the Design Principles article.

Enterprise Computing with the JavaEE

If for some reason you have to work with Java EE I recommend these resources (plus references like the specifications and API documentations): Use the latest editions only for such transient pieces of technology!

Rare goodies about various topics

Effective painting with AWT or Swing
This article describes precisely how the AWT and the Swing painting mechanism works and how it should be used.

java.util.prefs
This article is a brief introduction to the Preferences API.

Creating HelpSet Data and Navigation Files for JavaHelp
Ironically, JavaHelp is the 2nd party library with the single worst help / documentation. For the old version there once was a book named Creating Effective JavaHelp. It offers a free sample chapter which describes how to create HelpSet data and navigation files. The files of the example used in that chapter and other example files are available for download, too. The chapter also contains a very short, very simple introduction to XML.