Vorwort zur 5. Auflage
 
Java feiert in diesem Jahr sein zehnjähriges Jubiläum und breitet sich auf allen Feldern weiter aus. Im Server-Bereich ist Java stark vertreten, Spiele sind in Java programmierbar, fast jedes Mobiltelefon kann Midlets laden, und J/XFSTM (Java eXtensions for Financial Services) steuert Bankautomaten.
Nach fast einem Jahr Java 5 nimmt die Industrie erste Neuerungen an, und Frameworks entstehen, die nicht aufwärtskompatibel sind; WebServices oder Enterprise JavaBeans 3 machen Gebrauch von Annotationen, die in älteren Versionen von Java nicht verfügbar sind. Java 6 (Mustang) ist auf dem Weg, und die ersten Betas sind verfügbar. (An wenigen Stellen nimmt die fünfte Auflage schon Bezug dazu.) Java geht eindeutig in die Richtung der Vereinfachung, was mit dem schönen Begriff EoD (Ease of Development) belegt ist.
Für diese Auflage wurde wieder viel verbessert und erweitert. Ein besonderer Dank geht dabei an Dirk Försterling. In den meisten IO-Beispielen ist eine korrekte Fehlerbehandlung implementiert – das close() ist im finally-Block –, was vorher aus Gründen kürzerer Beispiele eingespart wurde. Den Java 5-Eigenschaften wurde mehr Raum eingeräumt, so auch den Annotationen. Präzisiert wurden Aussagen zum Kassenlader, zum Modulo/Restwertoperator, zur Motivierung von OOP. Beim Zusammenhang hashCode()/equals() hat sich ein falsches Folgerungszeichen eingeschlichen. Die Schnittstelle ZipConstants, die ZipFile und ZipEntry implementiert, gibt es in Java 5 nicht mehr. StringBuffer und StringBuilder sind nun symmetrisch beschrieben, der Scanner hat ein größeres Gewicht und wird in mehreren Beispielen verwendet. Einen großen Umbau erfuhr das Thread-Kapitel. Ein Grund ist, dass Klassen aus dem Paket java.util.concurrent Schritt für Schritt die bisherigen Techniken zur Synchronisation und Benachrichtigung ersetzen; die schon seit Java 1.0 gültigen Mechanismen mit dem Schlüsselwort synchronized und den Methoden wait()/notity() wurden auch beschrieben. Zusätzlich haben ThreadLocal/InheritableThreadLocal und UncaughtExceptionHandler ihren Platz gefunden. Die Priorität der Thread-Gruppen wurde korrigiert. Weitere Neuerungen in Kürze: ProcessBuilder, UTF-Kodierung und ein neues Kapitel zu JMX beziehungsweise der Management-API.
Und nun ist es wieder an der Zeit, dem griechischen Philosophen Platon (427–347 v. Chr.) zu folgen, der sagte: »Der Beginn ist der wichtigste Teil der Arbeit.«
|