Bevor die eigentliche Erläuterung der Programmiersprache Java beginnen kann, muss eine Java-Programmierumgebung, bspw. das Java Development Kit (JDK), installiert werden bzw. die Verwendung des Compilers und die Anzeige der programmierten und übersetzten Elemente vorgestellt werden. Installation des Java Development Kits Das Java Development Kit (JDK) ist derzeit in der Version 2 (Code-Name JDK 1.2) für die folgenden Plattformen verfügbar: Windows 95 bzw. Windows 98, Windows NT und Sun Solaris (SPARC bzw. x86). Die derzeit aktuelle JDK-Version kann unter den URLs http://java.sun.com oder http://www.javasoft.com kostenlos bezogen werden. Unter diesen URLs findet der Benutzer auch Hinweise, wie die plattformspezifische Installation des JDKs zu erfolgen hat. Nach erfolgreicher Installation sind die folgenden drei Komponenten vorhanden: Programmdateien Dies sind die ausführbaren Dateien, die zur Erzeugung, Übersetzung und zum Testen der späteren Java-Implementierungen nötig sind. Bibliotheken und Header-Dateien Dateien, die zur Erzeugung von native Code nötig sind. Die Verwendung von native Code wird in Kapitel 3.5 erläutert. Demonstrationsdateien Bereits fertige Java-Programme, die zum einen aus dem Source-Code und zum anderen aus dem übersetzten (compilierten) Code bestehen. Mit Hilfe dieser Programme kann ein erster Versuch in den Einstieg in die noch unbekannte Sprache versucht werden. In Java steht ein einfaches Werkzeug zur Verfügung, mit dem der Erfolg der Installationsprozedur überprüft werden kann: die Versionsüberprüfung des JDKs. Mittels der Anweisung java -version erhält man als Ausgabe und damit als Beweis für die Lauffähigkeit von Java java version "1.2". Setzen von Pfaden Um Java-Applets bzw. Applications ausführen zu können, müssen zwei Pfade gesetzt sein: die Variable CLASSPATH und die Variable PATH. In der Variablen CLASSPATH wird festgelegt, in welcher Datei sich die Basisklassen befinden. Wenn das JDK bspw. im Verzeichnis C:\jdk1.2 installiert ist, muss diese Variable den Inhalt C:\jdk1.2\jre\lib\rt.jar haben, den man sich bspw. unter Windows mit dem Befehl ECHO %CLASSPATH% anschauen kann. Die Abkürzung jre steht hierbei für Java Runtime Environment. Sollte hier ein anderer Wert eingetragen sein, so setzt man die Variable mit dem Befehl SET CLASSPATH=.;C:\jdk1.2\jre\lib\rt.jar um. Unter Windows 98 muss dies in der Datei autoexec.bat eingetragen werden, unter Windows NT kann der Inhalt in der Systemsteuerung im Menü System in den Umgebungsvariablen gesetzt werden. Hierbei darf der Teilausdruck ".;" nicht vergessen werden. Er legt fest, dass zunächst im Verzeichnis, in dem sich der Benutzer gerade findet, nach einer Klasse gesucht wird. Wird diese Kombination nicht verwendet, so kann bei einem Kommandoaufruf zwar die Datei, die die Basisklassen enthält, lokalisiert werden, nicht aber die Datei, die gerade übersetzt oder interpretiert werden soll. Die Variable PATH legt fest, wo die aufzurufenden Kommandos, bspw. java oder javac zu suchen sind. In diesem Beispiel sollte in der Variablen der Wert C:\jdk1.2\bin eingetragen sein, den man mit ECHO %PATH% unter Windows erfragen kann. Ist dies nicht der Fall, so kann der Wert analog zum Setzen der Variablen CLASSPATH mit dem Kommando SET PATH=C:\jdk1.2\bin;%PATH% geändert werden. Dies erfolgt analog für Windows 98 in der Datei autoexec.bat bzw. unter Windows NT in der Systemsteuerung. Die Verwendung des Teilausdrucks %PATH% bewirkt, dass der bisherige Inhalt der Variablen an den neuen Inhalt angehängt wird. Übersetzen von Java-Programmen Java-Programme werden üblicherweise in einem Text-Editor geschrieben. Hierzu können die auf den verschiedenen Betriebssystemen zur Verfügung stehenden Editoren, wie bspw. WordPad oder NotePad unter Windows bzw. emacs oder vi unter UNIX, verwendet werden. JDK umfasst daher auch keinen speziellen Editor zur Java-Programmierung. Es ist allerdings darauf zu achten, dass die Programmdateien das Suffix *.java erhalten, da nur dieses bei der Übersetzung vom Java-Compiler akzeptiert wird. Eine häufig auftretende Fehlerquelle ergibt sich hierbei unter Windows, da viele Editoren bei der Generierung von Textdateien automatisch das Suffix *.txt an den Dateinamen anhängen, das der Java-Compiler nicht versteht. Man muss weiterhin beachten, dass der Name der zu definierenden Klasse dem Dateinamen entspricht. In der folgenden Abbildung muss daher der Dateiname Beispiel1.java lauten. Ein Beispielprogramm, das mit Hilfe eines Editors erstellt werden kann, ist in Abb. 3-1 dargestellt. Die Funktionalität des Applets wurde bereits in Kapitel 1.4 erklärt. Abb. 3.1: Beispiel-Applet Abb. 3.2: Beispiel-Applet eingebettet in eine HTML-Seite Zur Anzeige muss das Applet übersetzt werden und in eine HTML-Datei eingebettet werden. Eine einfache HTML-Seite, die diese Funktion erfüllt, ist in Abb. 3-2 dargestellt. Man erkennt, dass der Compiler aus der Programmdatei Beispiel1.java eine Datei Beispiel1.class erzeugt hat und wie diese mit einer ergänzenden Größenangabe in eine HTML-Seite einzubetten ist. Aufgabe des Compilers ist die Übersetzung von Java-Quelltext in Java-Bytecode. Der Aufruf erfolgt nach der Syntax: `javac { Optionen } Dateiname .java` Abb. 3.3: Screenshot des Beispiel-Applets Nach dem Aufruf wird jede in der Quelldatei enthaltene Klasse und Schnittstelle in eine separate Datei mit dem Namen der Klasse bzw. der Schnittstelle und mit der bereits angesprochenen Erweiterung *.class übersetzt. Eine weitere Möglichkeit besteht in folgendem Compiler-Aufruf: javacg { Optionen } Dateiname .java javacg ist ein weiterer Compiler, der speziell für die Zusammenarbeit mit einem Debugger (jdb) vorgesehen ist. Ein Debugger ist ein spezielles Werkzeug, das die Problemsuche bei der Programmierung stark erleichtert, da hiermit bei der Ausführung an beliebigen Stellen im Code angehalten werden kann und der Inhalt der verwendeten Variablen analysiert werden kann. Dies ist insbesondere dann hilfreich, wenn Fehler vorliegen, die man durch bloßes Ansehen des Quellcodes nicht findet. Die Optionen, die bei der Übersetzung verwendet werden können, sind in Tab. 3-1 wiedergegeben.

Option | Funktion
-debug | Erzeugung von Debug-Mitschrift bei der Übersetzung.
-classpath Pfad | Mittels -classpath kann eine Liste von Pfadnamen angegeben werden, die durch Semikolon getrennt werden, in denen nach den Klassendateien gesucht wird. Hierdurch wird aber die Variable CLASSPATH verdeckt, die diese Information normalerweise bereits enthält.
-d Verzeichnisname | Hierdurch wird angegeben, wo die übersetzten Dateien abgelegt werden sollen. Ohne diese Angabe erfolgt die Ablage im Verzeichnis der Quelldateien.
-g | Erzeugung von Informationen zur Fehlersuche.
-nowarn | Unterdrückung der Warnmeldungen des Compilers.
-nowrite | Fehlerprüfung der Quelldatei ohne Erzeugung einer .class-Datei.
-O | Erzeugung von optimierten .class-Dateien.
-verbose | Ausgabe der Namen der übersetzten Klassen.

Tab. 3.1: Optionen des Java-Compilers Nach der Übersetzung des Beispielprogramms ergibt sich das in Abb. 3-3 dargestellt Bild. Java-Interpreter Wie bereits dargestellt, können Java-Programme auch außerhalb eines Browsers ausgeführt werden. Sie werden dann nicht als Applets, sondern als Applications bezeichnet und müssen eine statische Methode, die mittels void main (String[] arg) definiert wird, enthalten. Der Parameter arg enthält hierbei die an die Application zu übergebenden Argumente in Form einer Liste von Zeichenketten. Der Interpreter-Aufruf erfolgt nach folgender Syntax: java { Optionen } Klassentyp { Argumente } Der Klassentyp gibt hierbei an, welche Klasse auszuführen ist. Analog zur Übersetzung von Applets existiert auch hier ein Aufruf javag { Optionen } Klassentyp { Argumente } mit dessen Hilfe ein Debugger verwendet werden kann. Wurde die Klasse in einem Paket definiert, so muss sie vollständig mit dem Paketnamen bezeichnet werden. Der Interpreter verwendet dann eine Datei Klassentyp.class des Verzeichnisses, in dem das Paket abgelegt ist. Der Pfadname ergibt sich aus der Zusammensetzung eines der Verzeichnisse, die in der Variablen CLASSPATH angegeben sind und dem in einen Verzeichnisnamen umgewandelten Paketnamen. Wird kein Paket verwendet, so muss sich die *.class-Datei direkt in einem Verzeichnis befinden, das in CLASSPATH angegeben ist. Beim Aufruf von java können die in Tab. 3-2 angegeben Optionen verwendet werden.

Option | Funktion
-cs, -checksource | Übersetzung der angegebenen Quelldatei nur, wenn zwischen der Quellversion und der übersetzten Datei Unterschiede festgestellt werden.
-classpath Pfad | Mittels -classpath kann eine Liste von Pfadnamen angegeben werden, die durch Semikolon getrennt werden, in denen nach den Klassendateien gesucht wird. Hierdurch wird aber die Variable CLASSPATH verdeckt, die diese Information normalerweise bereits enthält.
-D Ressource=Wert | Änderung der voreingestellten Werte von Ressourcen, bspw. der Farben von Buttons.
-debug | Ausgabe eines Passworts durch den Interpreter, mit Hilfe dessen die Kommunikation mit dem Debugger (jdb) ermöglicht wird.
-help | Auflistung aller Optionen durch den Interpreter.
-ms Grösse | Angabe der maximal möglichen Speicher-Anfangsgröße zur Allokation von Objekten. Voreinstellung ist 1MB.
-mx Grösse -mx Grössek -mx Grössem | Angabe der maximalen Größe, die durch Objekte allokiert werden kann. Größe kann hierbei in Byte (siehe erste Zeile), mit nachfolgendem k in Kilobyte (siehe zweite Zeile) oder mit nachfolgendem m in Megabyte (siehe dritte Zeile) angegeben werden. Voreinstellung ist hierbei 16 MB.
-noasyncgc | Ausschaltung der asynchronen Speicherbereinigung.
-noverify | Keine Überprüfung durch den Interpreter.
-oss Grösse | Angabe der maximalen Größe des Stacks, den Java-Code eines Threads verwenden kann.
-prof | Erzeugung von Profiling-Information durch den Interpreter, die in der Datei java.prof abgelegt wird.
-ss Grösse | Angabe der maximalen Größe des Stacks, den native Code eines Threads verwenden kann.
-t | Ausschließlich in javag: Anzeige jeder ausgeführten Anweisung.
-v, verbose | Ausgabe der Namen der geladenen Klassen.
-verbosegc | Anzeige des freigegebenen Speichers durch den Interpreter.
-verify | Überprüfung des gesamten Codes durch den Bytecode-Verifier.
-verifyremote | Überprüfung des Codes durch den Bytecode-Verifier, der durch den Class-Loader geladen wird (Default).
-version | Anzeige der aktuell verwendeten Java-Version.

Tab. 3.2: Optionen des Java-Interpreters java Ein Beispielprogramm einer Application, das mit Hilfe eines Editors erstellt werden kann, ist in Abb. 3-4 dargestellt. Abb. 3.4: Beispiel-Application Zur Anzeige muss die Application übersetzt werden. Nach der Übersetzung mittels javac wird das Programm folgendermaßen ausgeführt: java Beispiel2 Als Ausgabe ergibt sich der Satz Dies ist die Ausgabe des Beispiels!. Dies wird durch Verwendung der Methode System.out.println erreicht, deren Aufgabe die Ausgabe von Text im Kommandozeilenfenster ist.