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:
A.java
:
package vorlesung.beispiel;public class A {... public static void main(...) {...};...}
class B {...}
C.java
:
package vorlesung.beispiel;public class C extends A {...}
<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.ADas 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/Aist 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
import vorlesung.beispiel.A
für die Klasse
A
aus dem Paket vorlesung.beispiel
oder
import vorlesung.beispiel.*
für den Import bei
Bedarf von beliebigen public Klassen aus dem Paket
vorlesung.beispiel
.