Wer möchte sich nicht gerne einen Java-Guru nennen dürfen? Der Weg dorthin ist jedoch steinig und oft schmerzlich. Mit seinem bei O’Reilly erschienenem Buch "Hardcore Java" möchte Robert Simmons dem Leser diesen ersparen und mit dem notwendigen Wissen ausstatten, damit dieser sicher in den Java-Olymp gelangt.
Vor dem Leser liegen 400 Seiten Informationen, die sich auf den Java-Kern beziehen und weitergehendende Themen wie Swing- oder J2EE-Programmierung außen vor lassen. Der Autor knüpft sich in jedem Kapitel ein Schwerpunktthema auf. Zunächst erläutert er einige der Besonderheiten von Java, wobei man sofort merkt, dass er ursprünglich aus der C++-Welt stammt und in Java viele in C++ vermisste Elemente gefunden hat. Insbesondere das Fehlen von Pointern, die konsequente Objektorientierung und die Laufzeit-Typinformation haben es dem Autor sehr angetan. Es folgt eine Sammlung verschiedener Codefragmente, anhand derer der Autor erläutert, wie man am effizientesten in Java programmiert und welche Fehler man dabei tunlichst vermeiden sollte. Umso ärgerlicher, dass dem Autor dabei einige grobe Schnitzer in den Programmbeispielen unterlaufen sind.
In den folgenden Kapiteln greift der Autor einzelne Fragestellungen auf und vermittelt anhand kompakter Beispiele die aus seiner Sicht „Best Practices“ in Java. Finale Variablen, Parameter und Klassen machen den Anfang, es folgen Hinweise, wie man am besten unveränderbare Objekte realisiert ("immutable objects"). Auf das fast schon obligatorische Collections-Kapitel, das eigentlich wenig Neues bringt, folgt ein Abschnitt zum Thema Exceptions, das für den nicht sehr erfahrenen Java-Programmierer sehr hilfreich ist. Der Autor warnt hier etwa vor Anfängerfehlern wie dem Abbilden jedes Fehlerzustands in eine eigene Exception-Klasse. Die darauf folgende Abhandlung über verschachtelte Klassen lebt ebenfalls wie der Rest des Buches von dem sehr lockeren, angenehm zu lesenden Schreibstil des Autors.
Nach einem Kapitel über Konstanten in Java, in dem auch Internationalisierung und die Verwendung von Ressourcen erläutert werden, gibt es einen „Cut“, und der Autor wendet sich von der „Hardcore“-Programmierung zur "soften" Datenmodellierung. Am klassischen "Bank"-Beispiel vermittelt der Autor sein Verständnis des Analyse- und Design-Prozesses, wobei er keinen Ausflug in die UML-Grundlagen unternimmt, sondern wieder schnell den Bogen zur Java-Kodierung findet: Wie statte ich meine Klasse mit PropertyChangeSupport aus, wie versehe ich meine Objekte mit Identität und Vergleichsoperatoren, wie gewährleiste ich die Datensicherheit durch Constraints? Leider werden die Themen Persistenz, Datenbanken und JDO nur ansatzweise erwähnt.
Nächstes Thema ist das Reflection API, mit dem der Autor einen JUnit-Testcase entwickelt, der eine Klasse auf vollständige Constaints prüft. Weiterhin beschäftigt er sich mit statischen und dynamischen Proxies und stell das Konzept der Java-Referenzobjekte vor. Hierbei nimmt er sich viel Zeit und bietet dem Leser einen erfrischenden Einstieg in das doch recht trockene Thema der Memory-Leak-Suche. Das letzte Kapitel behandelt die Neuerungen in Java 5 alias Tiger. Auch hier ist die C++-Herkunft des Autors offensichtlich, der den Schwerpunkt auf die Vorstellung des Java-Pendants der C++ Templates legt, die Generics.
"Hardcore Java" wird dem Anspruch seines Titels nicht gerecht. Hinter diesem würde man einen tiefen Blick in die Innereien von Java suchen – etwa mit Hinweisen zur detaillierten Funktionsweise der JVM, der Optimierung der Garbage Collection oder dem Performance-Finetuning. Das Buch ist vielmehr für den leicht fortgeschrittenen Java-Entwickler geeignet, der mit den Tipps und Empfehlungen des Buches ausgestattet ohne großen Lernprozess bessere Ergebnisse produzieren möchte. Leider findet sich der eine oder andere Flüchtigkeitsfehler im Buch und auch die dogmatisch vorgestellten Empfehlungen des Autors sollte der Leser kritisch hinterfragen.








