Basis-Werkzeuge

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

syntax 

java -version

erhält man als Ausgabe und damit als Beweis für die Lauffähigkeit von Java

syntax 

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.

syntax 

kap31 

Abb. 3.1: Beispiel-Applet

syntax 

kap31 

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:

syntax 

javac { Optionen } Dateiname .java

beispiel3.1 

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:

syntax 

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:

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

syntax 

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.

codekap34 

Abb. 3.4: Beispiel-Application

Zur Anzeige muss die Application übersetzt werden. Nach der Übersetzung mittels javac wird das Programm folgendermaßen ausgeführt:

code 

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.

SPNavRight SPNavRight SPNavRight
BuiltByNOF