3 Das Java–Programmiersystem JDK Im vorigen Kapitel haben Sie erfahren, daß ein Computer nicht in der Lage ist, von Menschen lesbare Programme direkt zu verstehen. Der Computer benötigt einen Dolmetscher, der das für Menschen verständliche Programm in seine Sprache übersetzt. Zum Java–Programmiersystem gehören sogar zwei solche Dolmetscher — der Java–Compiler und die sogenannte Java–Virtual–Machine. Bevor wir auf die Programmierung von Java eingehen, müssen wir Sie mit dem Java–Programmiersystem und speziell mit diesen beiden Dolmetschern vertraut machen. 3.1 Bestandteile des JDK Schon in der Einleitung wurde erwähnt, daß Java8 nicht nur aus einer Programmiersprache besteht. Alles, was man zur Java-Programmierung benötigt, wurde von den Schöpfern von Java, der Firma Sun9 , in einem Paket zusammengeschnürt, das sich JDK: Java Development Kit nennt. Das JDK enthält folgende Dinge: • Eine umfangreiche Sammlung von Programmbausteinen. Im JDK sind bereits sehr viele Programmbausteine, sogenannte Klassen, enthalten. Wenn man diese Bausteine in eigene Programme einbaut, kann man mit Java relativ einfach Internet-, Graphik- oder Fenster-Anwendungen erzeugen. Wir werden Ihnen in dieser Veranstaltung nur ganz wenige dieser Programmbausteine vorstellen, da wir zum Programmieren lernen lieber selbst einfache Programme bauen wollen als komplizierte Programme aus diesen Programmbausteinen zu erstellen. • Umfangreiche Dokumentation: Für all diese fertigen Programmbausteine (Klassen) und alle anderen Werkzeuge von Java liegt umfangreiche Dokumentation von HTML–Dateien vor, welche mit einem WWW–Browser betrachtet werden kann. Um die von Java bereitgestellten Programmbausteine zu verwenden, muß man viel mit dieser Dokumentation arbeiten. Daher werden wir im Rahmen dieser Veranstaltung ein paar Aufgaben stellen, bei denen Sie sich in der Dokumentation zurechtfinden müssen. • Einige Werkzeuge, zum Beispiel ein Werkzeug, das Ihre Programme liest und die enthaltene Dokumentation in HTML-Dokumenten zusammenfasst. Dieses Werkzeug werden Sie hier auch kennenlernen. • Java–Compiler und Java–Virtual–Machine. Diese Programme sind die Dolmetscher zwischen Ihnen und dem Computer. 8 http://www.java.sun.com 9 http://www.sun.com 17 3.2 Übersetzen und Ausführen von Java-Programmen Ein Java–Programm besteht aus einem oder mehreren Programmbausteinen, welche Klassen genannt werden. Jede Klasse ist in der Regel in einer eigenen Textdatei beschrieben und wird mit einem Text-Editor erstellt. Bevor Sie weiterlesen, sollten Sie daher mit einem Text-Editor umgehen können. Sie sollten auch mit der Kommandozeile von Unix umgehen können; Hinweise hierzu finden Sie im Anhang A und in der ersten Hausaufgabe. Wenn Sie unter anderen Betriebssystemen als Unix arbeiten wollen, beschaffen Sie sich die entsprechenden Informationen bitte selbst. Beispiel: In dem untenstehenden Kasten sehen Sie ein sehr einfaches Java–Programm. Wenn man es startet, gibt es den Text Hallo, Welt“ ” aus. Bitte tippen Sie das Programm in Ihrem Text–Editor ab und speichern es in einer Datei namens Hallo.java. Beachten Sie hierbei bitte, daß die Zeilennummern nicht zum Programm gehören — wenn wir Beispielprogramme abdrucken, numerieren wir die Zeilen durch, um auf die einzelnen Programmteile eingehen zu können. Außerdem achten Sie beim Abtippen bitte auf die Groß- und Kleinschreibung. Für Java besteht zwischen großgeschriebenen und kleingeschriebenen Buchstaben überhaupt keine Verbindung — so ist das Wort class für Java etwas völlig anderes als das Wort Class. Beispiel: Einfache Java–Klasse 1 2 3 4 5 6 7 class Hallo { public static void main(String[] args) { System.out.println("Hallo, Welt"); } } Da in diesem Kapitel nur der Java–Compiler behandelt werden soll, wollen wir hier auf die Funktionsweise von Java–Programmen noch nicht eingehen. Sie brauchen noch überhaupt nicht zu verstehen, was die ganzen kryptischen Symbole in dem Programm bedeuten; im nächsten Kapitel wird das alles viel klarer werden. Sie sollten nun eine Textdatei namens Hallo.java mit dem Text des vorigen Beispiels in ihrem Arbeitsverzeichnis besitzen. Als nächstes soll aus dieser Textdatei ein vom Computer ausführbares Programm erzeugt werden. Dazu verwendet man den Java-Compiler. In Kapitel 2.4 wurde ja bereits erläutert, daß ein Compiler ein für Menschen verständliches Programm in ein für Computer verständliches Programm umwandelt. Bevor Sie den Compiler verwenden können, muß auf Ihrem Computer die JavaProgrammierumgebung installiert und laufbereit sein. Falls Sie im CIP-Pool der TU Braunschweig arbeiten, dann ist das kein Problem — hier ist alles schon fertig installiert. Wenn Sie jedoch zuhause arbeiten möchten, müssen Sie selbst dafür sorgen, daß die Java–Umgebung funktioniert. Dabei helfen Ihnen vielleicht unsere im WWW verfügbaren Tips weiter (siehe auch WWW-Seite ? ). Wir 18 gehen im weiteren davon aus, daß Sie eine funktionsfähige Java-Programmierumgebung haben. Aber nun zum Java–Compiler — dieser ist ein Programm namens javac. Um durch ihn, die zuvor von Ihnen erstellte Datei Hallo.java übersetzen zu lassen, wechseln Sie bitte auf einer Kommandozeile in das Verzeichnis, in welchem Sie die Datei abgespeichert haben. Dort geben Sie dann bitte ein: > javac Hallo.java Der Compiler prüft darauf zunächst, ob die Textdatei Hallo.java ein gültiges Java–Programm enthält. Java–Programme müssen einen ganz bestimmten Aufbau haben, damit sie vom Compiler übersetzt werden können. Nur wenn die Datei tatsächlich ein gültiges Programm enthält, übersetzt der Compiler sie in eine dem Computer verständliche Form und dient so als Dolmetscher zwischen uns und dem Computer. Wenn Sie die Klasse korrekt abgetippt haben, sollte das Kompilier–Kommando zu keiner Bildschirmausgabe führen. Der Compiler ist auch kleinsten Tippfehlern gegenüber sehr ungnädig — selbst wenn Sie beim Abtippen des Programms nur kleine Fehler gemacht haben, kann es ihnen passieren, daß der Compiler ihr Programm mit einer Fehlermeldung ablehnt. Falls Ihnen das beim Compiler–Aufruf passiert ist, prüfen Sie bitte, ob Sie das Beispielprogramm exakt abgetippt haben, korrigieren es, speichern die Änderungen (!) und probieren dann erneut den Aufruf des Compilers. Wenn das nicht hilft, lesen Sie bitte unsere Hinweise zu Fehlermeldungen in Anhang C. Wenn Sie auch damit nicht weiterkommen, holen Sie sich bitte einen Hiwi zur Hilfe. Wir gehen im folgenden davon aus, daß der Aufruf des Compilers funktioniert hat. In diesem Fall hat der Compiler Ihr Programm übersetzt und die übersetzte Fassung in einer neuen Datei namens Hallo.class gespeichert. Schauen Sie bitte nach, ob diese Datei tatsächlich erzeugt wurde10 . Die neu erzeugte Datei Hallo.class enthält die für einen Computer verständliche Version unserer Klasse. Wenn Sie diese Datei mit dem cat-Kommando auf den Bildschirm ausgeben, erhalten Sie eine ganz wilde Ausgabe — außerdem müssen Sie danach möglicherweise eine neue Kommandozeile öffnen, weil Ihre alte Kommandozeile nur noch komische Zeichen anzeigt. Wir Menschen können mit dem Inhalt der erzeugten Datei Hallo.class also nicht viel anfangen. Wir haben Ihnen bisher aber nur die halbe Wahrheit erzählt — es ist zwar tatsächlich so, daß der Java–Compiler die Textdatei Hallo.java in eine Maschinnensprache–Datei Hallo.class umgewandelt hat. Es kann jedoch kein tatsächlich existierender Computer die vom Java–Compiler benutzte Maschinensprache direkt verstehen. Der Java–Compiler übersetzt nämlich jedes Programm in eine künstliche Maschinensprache, den Java–Bytecode. Java–Bytecode ist eine Art Computer–Esperanto. Kein Computer versteht es direkt, doch es ähnelt den meisten Computermaschinensprachen. Soll ein Computer das in einer Java–Bytecode–Datei enthaltene Programm abarbeiten, so benötigt er einen weiteren Dolmetscher, der den Java–Bytecode für ihn übersetzt. Dieser zweite Dolmetscher nennt sich Bytecode-Interpreter11 . 10 Wenn 11 Das Sie nicht wissen, wie das geht, haben Sie vermutlich Anhang A noch nicht gelesen englische Wort Interpreter“ heißt auf deutsch Dolmetscher“ ” ” 19 Man tut im übrigen so, als wäre Bytecode tatsächlich eine Maschinensprache und stellt sich gerne vor, daß irgendwo ein Computer existieren könnte, der den Bytecode direkt versteht. Da dieser Computer aber nur durch den BytecodeDolmetscher existiert, nennt man den Bytecode-Dolmetscher auch Java Virtual Machine (JVM) (virtueller Java-Computer). Natürlich können Java-Programme damit nicht so schnell sein wie Programme anderer Programmiersprachen, welche für den jeweilige Computer direkt verständlichen Programmcode erzeugen. Der Prozessor Ihres Computes führt ja kompilierte Java–Programme niemals direkt aus sondern benutzt immer seinen Bytecode–Dolmetscher. Der Umweg über den Java–Bytecode ist aber auch ein sehr großer Vorteil und hat den Einsatz von Java im Internet erst ermöglicht — hierdurch werden Java-Programme nämlich systemunabhängig. In der Theorie läuft jedes JavaProgramm auf jeder Hardware und auf jedem Betriebssystem, für das eine virtuelle Java–Maschine existiert. Man muß sich also nicht mehr entscheiden, ob man ein Programm für Windows, Macintosh, Unix oder sonst ein Betriebssystem kompiliert. Wenn die virtuelle Java-Maschine auf diesem Betriebssystem vorhanden ist, läuft hierauf jedes kompilierte Java–Programm. Das Programm, welches die virtuelle Maschine simuliert, heißt java. Um die kompilerte Datei Hallo.class auszuführen, geben Sie bitte auf der Kommandozeile das Kommando > java Hallo ein. Daraufhin führt der Bytecode-Interpreter den in Hallo.class enthaltenen Bytecode aus. Es sollte folgende Meldung am Bildschirm erscheinen: Gratuliere, Ihr erstes Java--Programm funktioniert. Ein Hinweis noch: Beachten Sie, daß die Endung .class“ beim Aufruf des ” Bytecode-Interpreters nicht mit angegeben werden darf. Hingegen muß beim Aufruf des Compilers javac immer die Endung .java“ mit angegeben werden. ” 3.3 Zusammenfassung ⊲ Was ist das JDK ? ⊲ Warum benötigt man einen Compiler ? ⊲ Sie sollten den Java-Compiler aufrufen können. ⊲ Was erzeugt der Java-Compiler ? ⊲ Was ist ein Bytecode-Interpreter, und warum wird er benötigt ? ⊲ Wie unterscheiden sich Java-Compiler und Bytecode-Interpreter bezüglich der Endung von Dateinamen ? ⊲ Überlegen Sie sich, wieso der Bytecode Java so gut für die Verwendung im Internet geeignet macht — berücksichtigen Sie hierbei, daß für Menschen verständlicher Programmtext meist als Geschäftsgeheimnis angesehen wird. 20