Compiler & Interpreter (Windows 95 oder NT)

Leider stellt das JDK keine graphische Benutzeroberfläche zur Bedienung von Compiler und Interpreter zur Verfügung. Beide Werkzeuge müssen also in einer DOS-Box bedient werden. Am besten, Sie öffnen eine DOS-Box in Ihrem Arbeitsverzeichnis. Dort können Sie dann mit den folgenden beiden Kommandos arbeiten.

javac [ Optionen ] Dateiname.java ...
kompiliert Javadateien nach Bytecode

-classpath Pfad Verzeichnisse die Klassen enthalten (ignoriert CLASSPATH)
-d Verzeichnis Verzeichnis wo .class-Dateien hingeschrieben werden
-g erzeugt Zusatzinformationen für den Debugger
-nowarn schaltet Warnungsmeldungen ab
-O erzeugt optimierten Bytecode
-verbose protokolliert Kompilation ausführlich

java [ Optionen ] Klassenname <Argumente>
interpretiert Bytecode (in .class-Dateien)

-cs, -checksource Kompiliert Quelldatei neu, falls sie jünger ist als die Klassendatei
-classpath Pfad Verzeichnisse, die Klassen enthalten (ignoriert CLASSPATH)
-v, -verbose schreibt eine Meldung nach stdout beim Laden einer Klasse
-verbosegc Garbage Collector schreibt eine Meldung beim Freigeben von Speicher

javac - der Java Compiler

Obwohl Java aussieht wie C oder C++, wurde der Sprachumfang doch stark vereinfacht. Wohltuend ist auch die Kompaktheit des Compilers. Nicht Dutzende von Optionen, die sich auf mehrere hundert Arten kombinieren lassen, sondern nur sechs Optionen stellt javac zur Verfügung. Selbst von diesen sechs braucht man bei einer normalen Installation keine einzige. Der Aufruf von javac sieht folgendermassen aus:

javac [ Optionen ] Dateiname.java ...

dabei bedeuten die eckigen Klammern, dass keine, eine oder mehrere der unten aufgeführten Optionen in einer beliebigen Reihenfolge vorkommen können. Die drei Punkte am Schluss bedeuten, dass auch mehrere Dateien angegeben werden können. Es ist sogar möglich Platzhalter zu verwenden: z.B. javac *.java kompiliert alle .java-Dateien im aktuellen Verzeichnis.

Wenn Sie Klassen importieren wollen, so müssen Sie deren Verzeichnis bekanntgeben. Dies geschieht durch das Setzen der Umgebungsvariablen CLASSPATH. CLASSPATH besteht aus einer Liste von Pfadnamen, die mit Semikolon voneinander getrennt sind. z.B.:
.;c:\Projekte\Fraktale\Klassen;c:\java\lib

Wird in einer Quelldatei eine Klasse referenziert, so sucht javac mit folgender Strategie danach:

  1. ist eine der anderen Dateien, die beim Aufruf angegeben wurden, die gesuchte Klasse (noch in Quellform)?
  2. falls die Option -classpath angegeben ist, suche in den dort angegebenen Pfaden
  3. sonst suche die Klasse in einem der Pfade, die in CLASSPATH erscheinen

Optionen

-classpath Pfad
Gibt javac an, wo Klassenbibliotheken gefunden werden können. Diese Option überschreibt die Einstellung, die mit der Umgebungsvariablen CLASSPATH gesetzt wurde. Es können mehrere Verzeichnisse durch Semikolon (;) getrennt angegeben werden. Pfad sieht dann zum Beispiel so aus:
.;c:\Projekte\Fraktale\Klassen
-d Verzeichnis
Gibt an, wo die kompilierten .class-Dateien gespeichert werden.
-g
Erzeugt zusätzliche Informationen für den Debugger.
-nowarn
Schaltet Warnungen aus, d.h. es werden nur noch Fehler (Error) angezeigt.
-O
Optimiert den kompilierten Code auf Geschwindigkeit. Die dabei erzeugten .class-Dateien können deshalb etwas grösser werden als die nicht-optimierten Varianten.
-verbose
Veranlasst die Ausgabe von Datei- und Klassennamen, die kompiliert bzw. geladen werden.

Vergleichen Sie auch diese Beschreibung mit der Original Referenzseite von JavaSoft.


java - der Bytecode-Interpreter

Der Compiler erzeugt aus Java-Quellcode eine Art Maschinencode, den sogenannten Bytecode. Dieser ist aber nicht direkt durch eine Hardware ausführbar, sondern wird durch den Bytecode-Interpreter java interpretiert. java kann auch als die Implementation der virtuellen Maschine angesehen werden, auf der alle Java-Programme laufen. Dadurch werden die Programme zwar langsamer als wenn sie direkt von der Hardware ausgeführt würden, der Gewinn ist jedoch Portabilität. Es muss für jede Plattform einmal ein Bytecode-Interpreter geschrieben werden. Danach sind alle Java-Programme ausführbar, und zwar unabhängig davon, auf welcher Plattform sie entwickelt wurden. Der Aufruf von java sieht wie folgt aus:

java [ Optionen ] Klassenname <Argumente>

Beachten Sie, dass hier nur noch der Klassenname angegeben werden muss. java erweitert diesen automatisch um die Endung .class. Die Klasse Klassenname wird geladen und deren main-Methode aufgerufen. Sämtliche Argumente (durch Leerzeichen getrennt) werden der main-Methode im Array args[] übergeben.

Die Suche nach anderen Klassen, die beim Laden gelinkt werden, erfolgt auch mittels der Umgebungsvariablen CLASSPATH oder der Option -classpath beim Aufruf des Interpreters.

Bei den Optionen ist java leider nicht ganz so schlank wie der Compiler. Im folgenden sind nur einige wichtige Optionen angegeben, mit denen java aufgerufen werden kann:

Optionen (unvollständig)

-cs, -checksource
Veranlasst java beim Laden einer kompilierten Klasse die Zeit der letzten Änderung von der Klassendatei und der Quellcodedatei zu vergleichen. Ist die Quellcodedatei jünger als die Klassendatei, so wird eine Neukompilation des Quellcodes veranlasst, und danach erst die Klassendatei geladen.
-classpath Pfad
hat die gleiche Bedeutung wie beim Compiler.
-v, -verbose
Veranlasst java den Namen jeder Klasse, die geladen wird, nach stdout zu schreiben.
-verbosegc
Veranlasst den Garbage Collector eine Meldung zu schreiben, sobald er Speicher freigibt.

Eine komplette Beschreibung finden Sie auf der Original Referenzseite von JavaSoft.


JDK - javac und java - Tips und Hinweise - Lösungsmöglichkeit (OOP)
OOP - Werkzeuge - Referenzen - Fäden - Synchronisation - Applets - Dokumentation
Werkstatt - Bibliographie