Pakete in Java

Pakete in Java (Java Packages) bestehen aus mehreren Klassendefinitionen, die auf verschiedene Dateien aufgeteilt werden können. Als erste Anweisung enthält jede Datei das Paket zu dem es Definitionen beisteuert. Zum Beispiel soll das Paket vorlesung.beispiel die folgenden Klassen enthalten, A, B und C. A und C sind Klassen, die public deklariert ist und B ist eine Klasse, die nur in dem Paket sichtbar sein soll.

Dann kann das Paket aus folgenden Dateien bestehen:

Klassen die als public deklariert sind müssen in eigenen Dateien mit dem Namen <Klassenname>.java stehen. Diese Dateien können allerdings auch noch beliebige andere Klassendefinitionen enthalten, solange diese nicht public sind.

Damit der Compiler die Dateien, die zu einem Paket gehören wiederfinden kann, müssen sie in einem Verzeichnis <dir>/vorlesung/beispiel stehen, wobei das Verzeichnis <dir> in der Variablen CLASSPATH enthalten sein muß.

Als Beispiel für Pakete gibt es die funktionalen Listen aus der Vorlesung als Paket list.

Übersetzen von Dateien aus Paketen

Um z.B. das File C.java zu übersetzen, kann man in das Verzeichnis <dir>/vorlesung/beispiel gehen und javac C.java aufrufen, dann muß aber <dir> in der Variablen CLASSPATH enthalten sein, damit auch die Klasse A.java gefunden wird, von der C erbt.

Eine Alternative ist es nicht in das Verzeichnis des Paketes zu gehen und von <dir> aus den Compiler mit javac vorlesung/beispiel/C.java aufzurufen. In diesem Fall reicht es aus, wenn CLASSPATH das Verzeichnis ./ enthält oder aber CLASSPATH nicht gesetzt ist.

Ausführen von Programmen in Paketen

Um jetzt die main Funktion in Klasse A auszuführen muß immer der volle Name der Klasse dem Javainterpreter übergeben werden, d.h. inklusive des Paketes in dem sich die Klasse befindet, also:
java vorlesung.beispiel.A
Das gilt auch dann, wenn man sich in dem Verzeichnis befindet in dem A.class steht.

Beachte, daß der Paketname verlangt wird und nicht das Name des Verzeichnisses, indem sich A befindet. D.h.

java vorlesung/beispiel/A
ist falsch.

Wie beim übersetzen von Programmen, muß <dir> in der Variablen CLASSPATH enthalten sein, d.h. ruft man den Javainterpreter mit java vorlesung.beispiel.A aus dem Verzeichnis <dir>/vorlesung/beispiel auf, dann muß <dir> in CLASSPATH enthalten sein; ruft man den Interpreter aus dem Verzeichnis <dir> auf, dann reicht es wenn ./ in CLASSPATH enthalten ist, bzw. CLASSPATH braucht nicht gesetzt zu sein.

Import von Klassen aus Paketen

Klassen, die in Paketen als public deklariert sind, können von anderen Paketen importiert werden. Dazu gibt es zwei Alternativen
  1. import vorlesung.beispiel.A für die Klasse A aus dem Paket vorlesung.beispiel oder
  2. import vorlesung.beispiel.* für den Import bei Bedarf von beliebigen public Klassen aus dem Paket vorlesung.beispiel.

Part of Objektorientierte Programmierung
Andreas Podelski, Abdelwaheb Ayari, Hubert Baumeister
February 25, 1997

Imprint | Data Protection