Falls Sie die ersten Gehversuche in Java machen wollen, ohne erst viele Grundlagen lernen zu müssen, oder wenn Sie einfach nur daran interessiert sind, möglichst schnell Ihr erstes Java-Programm auszuführen, dann sollten Sie diesen Abschnitt lesen. Sie erfahren hier in einer kurzen Anleitung, wie Sie ein einfaches Programm erstellen und mit den Werkeugen des JDK übersetzen und ausführen. Zusätzlich gibt es einige Hinweise, um zeilenorientierte Ein- und Ausgaben durchzuführen.
Installieren Sie das JDK wie in Kapitel 2 beschrieben und sorgen Sie dafür, daß in Ihrer Pfadangabe das Verzeichnis \jdk1.1.2\bin enthalten ist. Falls Sie das JDK nicht nach c:\jdk1.1.2 installiert haben, passen Sie die Pfadangaben entsprechend an.
Erstellen Sie mit einem beliebigen Editor die folgende Datei hello.java:
public class Hello
{
public static void main(String args[])
{
System.out.println("Hello, world");
}
}
Diese Datei enthält die Definition der Klasse Hello. Die Klasse enthält lediglich eine einzige Methode main, die das Hauptprogramm unserer Applikation enthält.
Übersetzen Sie die Datei mit dem Kommando javac (so heißt der Java-Compiler des JDK):
javac Hello.java
Sie haben nun eine Datei Hello.class erzeugt, die mit dem Java-Interpreter ausgeführt werden kann:
java Hello
Das Programm gibt nun die gewünschte Meldung auf dem Bildschirm aus:
Hello, world
Auf diese Weise können nun beliebige Java-Programme angelegt, übersetzt und ausgeführt werden. Die im Buch abgedruckten Beispielprogramme befinden sich auf der CD-ROM im Verzeichnis \examples. Kopieren Sie diese einschließlich der darin enthaltenen Unterverzeichnisse in ein beliebiges Verzeichnis auf Ihrer Festplatte. Benutzen Sie einen beliebigen Editor zur Eingabe oder Veränderung von .java-Dateien, übersetzen Sie die Datei mit dem Kommando javac, und starten Sie das fertige Programm mit dem Kommando java. Falls Sie ein Applet geschrieben haben, erstellen Sie zusätzlich eine passende HTML-Datei und starten dann das Programm mit dem Kommando appletviewer anstatt mit java.
Es ist bekannt, daß man sich über die Formatierung von Quelltexten und die Einrückung von Deklarationen und Anweisungen streiten kann. Jeder Entwickler hat seinen eigenen Stil und kennt gute Argumente, genau diesen zu verwenden. Mittlerweile gibt es einige große Lager, denen man sich anschließen kann, oder man ist gezwungen, seinen eigenen Stil einem vorgegebenen Style-Guide anzupassen. Wir wollen uns diesen fruchtlosen Diskussionen nicht anschließen und keinesfalls behaupten, die in diesem Buch verwendete Art, Sourcecode zu formatieren, wäre die einzig richtige. Dennoch wurde versucht, die Beispielprogramme einigermaßen konsistent zu formatieren und dabei einige wenige Regeln einzuhalten.
Bei Klassen- und Methodendefinitionen stehen die geschweiften Klammern unterhalb der Deklarationsanweisung und die eigentliche Deklaration ist eingerückt:
import java.io.*;
public class Example1303
{
public static void main(String args[])
{
//Hier steht der Methodenrumpf
}
}
Bei Kontrollanweisungen innerhalb einer Methode schreiben wir die öffnende Klammer dagegen in dieselbe Zeile wie die einleitende Anweisung:
for (int i = 0; i < aNeighbours.length; ++i) {
if (p1.x + aNeighbours[i][0] == p2.x) {
if (p1.y + aNeighbours[i][1] == p2.y) {
return true;
}
}
}
Dies gilt auch für fortgesetzte Anweisungen wie beispielsweise else oder else if:
if (cmd.equals("Größer")) {
d.height *= 1.05;
d.width *= 1.05;
} else if (cmd.equals("Kleiner")) {
d.height *= 0.95;
d.width *= 0.95;
} else {
x = 10;
}
Diese Technik verwenden wir meist auch, wenn bei einem Methodenaufruf nicht alle Argumente in eine Zeile passen:
System.out.println(
"Grüße aus Hamburg".regionMatches(
8,
"Greetings from Australia",
8,
2
)
);
Diese einfachen Regeln lassen sich in den meisten Fällen anwenden, es gibt aber auch Fälle, in denen sie versagen. So zum Beispiel, wenn der Testausdruck einer if-Anweisung über mehrere Zeilen geht, wenn die Parameterdeklaration einer Methode nicht in eine Zeile paßt oder schlicht, wenn die Verschachtelung bereits sehr tief ist und keine weitere Einrückung zuläßt. In diesem Fall sei der Leser um Nachsicht gebeten und aufgefordert, den ästhetischen Anspruch an das Programm zugunsten pragmatischer Erwägungen zurückzustellen.
Für die ersten Schritte in einer neuen Sprache benötigt man immer auch I/O-Routinen, um einfache Ein- und Ausgaben vornehmen zu können. Glücklicherweise kann man in Java nicht nur grafikorientierte Programme schreiben, sondern auch auf die Standardein- und -ausgabe zugreifen. Damit stehen für kleine Programme einfache I/O-Routinen zur Verfügung, die wie in den meisten konventionellen Programmiersprachen verwendet werden können.
Mit Hilfe des Kommandos System.out.println können einfache Ausgaben auf den Bildschirm geschrieben werden. System.out.println erwartet als einziges Argument eine Zeichenkette. Mit Hilfe des Plus-Operators können Zeichenketten und numerische Argumente verknüpft werden, so daß man neben Text auch Zahlen ausgeben kann:
public class Hello
{
public static void main(String args[])
{
System.out.println("1+2=" + (1+2));
}
}
Die Ausgabe des Programms ist:
1+2=3
Leider ist es etwas komplizierter, Daten zeichenweise von der Tastatur zu lesen. Zwar steht ein vordefinierter Eingabe-Stream System.in zur Verfügung. Dieser ist aber nicht in der Lage, die eingelesenen Zeichen in primitive Datentypen zu konvertieren. Statt dessen muß zunächst eine Instanz der Klasse InputStreamReader und daraus ein BufferedReader erzeugt werden. Dieser kann dann dazu verwendet werden, die Eingabe zeilenweise zu lesen und das Ergebnis in einen primitiven Typ umzuwandeln. Weitere Information zur streambasierten Ein-/Ausgabe sind in Kapitel 13 zu finden.
Das folgende Listing zeigt dies am Beispiel eines Programms Hello2.java, das zwei Ganzzahlen einliest, sie zusammenzählt und das Ergebnis auf dem Bildschirm ausgibt:
import java.io.*;
public class Hello2
{
public static void main(String args[])
throws IOException
{
int a, b, c;
BufferedReader din = new BufferedReader(
new InputStreamReader(System.in));
System.out.println("Bitte a eingeben: ");
a = Integer.parseInt(din.readLine());
System.out.println("Bitte b eingeben: ");
b = Integer.parseInt(din.readLine());
c = a + b;
System.out.println("a+b="+c);
}
}
Werden die Zahlen 10 und 20 eingegeben, so lautet die Ausgabe des Programms:
Bitte a eingeben: 10 Bitte b eingeben: 20 a+b=30