11 Die Klassenbibliothek
»Was wir brauchen, sind ein paar verrückte Leute;
seht euch an, wohin uns die Normalen gebracht haben.«
– George Bernard Shaw (1856–1950)
11.1 Die Java-Klassenphilosophie

Eine Programmiersprache besteht nicht nur aus einer Grammatik, sondern, wie im Fall von Java, auch aus einer Programmierbibliothek. Eine plattformunabhängige Sprache – so wie sich viele C oder C++ vorstellen – ist nicht wirklich plattformunabhängig, wenn auf jedem Rechner andere Funktionen und Programmiermodelle eingesetzt werden. Genau dies ist der Schwachpunkt von C(++). Die Algorithmen, die kaum vom Betriebssystem abhängig sind, lassen sich überall gleich anwenden, doch spätestens bei grafischen Oberflächen ist Schluss. Dieses Problem ergibt sich in Java seltener, weil sich die Entwickler große Mühe gaben, alle wichtigen Methoden in wohlgeformten Klassen und Paketen unterzubringen. Diese decken insbesondere die zentralen Bereiche Datenstrukturen, Ein- und Ausgabe, Grafik- und Netzwerkprogrammierung ab.
11.1.1 Übersicht über die Pakete der Standardbibliothek

Die Java 7-Klassenbibliothek bietet genau 208 Pakete.[175](Unsere Kollegen aus der Microsoft-Welt müssen eine dickere Pille schlucken, denn .NET 4 umfasst 408 Pakete (Assemblies genannt). Dafür enthält .NET aber auch Dinge, die in der Java-Welt der Java EE zuzuordnen sind. Aber auch dann liegt .NET immer noch vorne, denn Java EE 6 deklariert gerade einmal 117 Pakete.) Die wichtigsten davon fasst die folgende Tabelle zusammen:
Paket | Beschreibung |
java.awt | Das Paket AWT (Abstract Windowing Toolkit) bietet Klassen zur Grafikausgabe und zur Nutzung von grafischen Bedienoberflächen. |
java.awt.event | Schnittstellen für die verschiedenen Ereignisse unter grafischen Oberflächen |
java.io | Möglichkeiten zur Ein- und Ausgabe. Dateien werden als Objekte repräsentiert. Datenströme erlauben den sequenziellen Zugriff auf die Dateiinhalte. |
java.lang | Ein Paket, das automatisch eingebunden ist und unverzichtbare Klassen wie String-, Thread- oder Wrapper-Klassen enthält |
java.net | Kommunikation über Netzwerke. Bietet Klassen zum Aufbau von Client- und Serversystemen, die sich über TCP beziehungsweise IP mit dem Internet verbinden lassen. |
java.text | Unterstützung für internationalisierte Programme. Bietet Klassen zur Behandlung von Text und zur Formatierung von Datumswerten und Zahlen. |
java.util | Bietet Typen für Datenstrukturen, Raum und Zeit sowie für Teile der Internationalisierung sowie für Zufallszahlen. |
javax.swing | Swing-Komponenten für grafische Oberflächen. Das Paket besitzt diverse Unterpakete. |
Eine vollständige Übersicht aller Pakete gibt Anhang A, »Die Klassenbibliothek«. Als Entwickler ist es unumgänglich für die Details die JavaDoc unter http://download. oracle.com/javase/7/docs/api/ zu studieren.
Offizielle Schnittstelle (java und javax-Pakete)
Das, was die JavaDoc dokumentiert, bildet den erlaubten Zugang zum JDK. Die Typen sind für die Ewigkeit ausgelegt, sodass Entwickler darauf zählen können, auch noch in 100 Jahren ihre Java-Programme ausführen zu können. Doch wer definiert die API? Im Kern sind es vier Quellen:
- Oracle-Entwickler setzen neue Pakete und Typen in die API.
- Der Java Community Process (JCP) beschließt eine neue API. Dann ist es nicht nur Oracle allein, sondern eine Gruppe, die eine neue API erarbeitet und die Schnittstellen definiert.
- Die Object Management Group (OMG) definiert eine API für CORBA.
- Das World Wide Web Consortium (W3C) gibt eine API etwa für XML-DOM vor.
Die Merkhilfe ist, dass alles, was mit java oder javax beginnt, eine erlaubte API darstellt, und alles andere zu nicht portablen Java-Programmen führen kann. Es gibt weiterhin Klassen, die unterstützt werden, aber nicht Teil der offiziellen API sind. Dazu zählen etwa diverse Swing-Klassen für das Aussehen der Oberfläche.
Hinweis |
Die Laufzeitumgebung von Oracle liefert noch über 3.000 Klassendateien in den Paketen sun und sunw aus. Diese internen Klassen sind nicht offiziell dokumentiert,[176](Das Buch »Java Secrets« von Elliotte Rusty Harold, http://ibiblio.org/java/books/secrets/, IDG Books, ISBN 0764580078, geht einigen Klassen nach, ist aber schon älter.) aber zum Teil sehr leistungsfähig und erlauben selbst direkten Speicherzugriff oder können Objekte ohne Standard-Konstruktor erzeugen: Listing 11.1: com/tutego/insel/sun/UnsafeInstance.java, Ausschnitt Field field = Unsafe.class.getDeclaredField( "theUnsafe" ); |
Standard Extension API (javax-Pakete)
Einige der Java-Pakete beginnen mit javax. Dies sind ursprünglich Erweiterungspakete (Extensions), die die Kern-Klassen ergänzen sollten. Im Laufe der Zeit sind jedoch viele der früher zusätzlich einzubindenden Pakete in die Standard-Distribution gewandert, sodass heute ein recht großer Anteil mit javax beginnt, aber keine Erweiterungen mehr darstellt, die zusätzlich installiert werden müssen. Sun wollte damals die Pakete nicht umbenennen, um so eine Migration nicht zu erschweren. Fällt heute im Quellcode ein Paketname mit javax auf, ist es daher nicht mehr so einfach zu entscheiden, ob eine externe Quelle mit eingebunden werden muss beziehungsweise ab welcher Java-Version das Paket Teil der Distribution ist. Echte externe Pakete sind unter anderem:
- Enterprise/Server API mit den Enterprise JavaBeans, Servlets und JavaServer Faces
- Java Persistence API (JPA) zum dauerhaften Abbilden von Objekten auf (in der Regel) relationale Datenbanken
- Java Communications API für serielle und parallele Schnittstellen
- Java Telephony API
- Sprachein-/-ausgabe mit der Java Speech API
- JavaSpaces für gemeinsamen Speicher unterschiedlicher Laufzeitumgebungen
- JXTA zum Aufbauen von P2P-Netzwerken
Ihr Kommentar
Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.