1.1. Grundlagen und Einführung
Typen der Programmiersprache Java lassen sich unterteilen in primitive
Typen (z.B. int, double oder boolean)
und Referenztypen. Klassendeklarationen definieren neue Referenztypen (Klassentypen).
Eine (normale) Klassendeklaration mit leerem Klassenkörper zeigt das anschließende
Java-Listing.
Listing 1.1. EmptyClass.java. Deklaration einer Klasse mit leerem
Klassenkörper.
Eine Klasse wird öfters als Container für Funktionalität bezeichnet. Diese
abstrakte Aussage soll in den folgenden Abschnitten nach und nach konkretisiert
werden.
Der Klassenkörper beginnt mit der geschweiften Klammer "{" und endet mit
"}". Innerhalb dieses Klammerpaares können Deklarationen sogenannter
Mitglieder der Klasse stehen. Welche Mitglieder (engl. members)
der Klassenkörper "beherbergen" kann, soll im Verlauf der folgenden Abschnitte
näher erläutert werden. Das Beispiellisting beginnt in der ersten Zeile mit einem
Kommentar. Danach schließt sich das Schlüsselwort class an. Der Name
der Klasse folgt im Anschluss und lautet im Beispiel EmptyClass.
Die minimale Klassendeklaration kann durch Aufruf des Java-Compilers in eine
zugehörige Klassendatei EmptyClass.class übersetzt werden.
> javac EmptyClass.java
Es kann nun versucht werden, die Klassendatei EmptyClass.class
mit Hilfe das Java-Launchers java ausführen zu lassen.
> java EmptyClass
Dies wird jedoch mit der Fehlermeldung "java.lang.NoSuchMethodError:
main" quittiert. Der Aufruf von java versucht das
Java-Programm zu starten, indem das Tool die Java-Laufzeitumgebung (Java runtime
environment, JRE) startet und die im Beispielaufruf angegebene Klasse
EmptyClass einliest. Die Klasse ist innerhalb der Datei
EmptyClass.class codiert. Dabei wird in dieser Klasse nach einer
main-Methode gesucht, um diese aufzurufen. Da die Beispielklasse
keine derartige Methode enthält, erfolgt nach Aufruf des Java-Launchers die
entsprechende Fehlermeldung. Im anschließenden Listing wird die Klasse
HelloWorld deklariert, die eine main-Methode enthält.
Das kurze Programm soll die Zeichenkette "HelloWorld!" auf dem Bildschirm
(Eingabeaufforderung, Konsole) ausgeben.
Listing 1.2. HelloWorld.java. Deklaration der Klasse
HelloWorld, die eine main-Methode enthält.
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
Die Deklaration der Klasse HelloWorld enthält neben
class die Schlüsselwörter public, static
und void, die vor dem Methodennamen main stehen.
Dabei werden public und static
als Modifier der Methode bezeichnet und void
gibt an, dass die Methode keinen Wert zurückgibt. Zu Methoden einer Klasse wird
in Abschnitt 1.3 näher eingegangen. Schließlich enthält die Methode
eine Anweisung zur Ausgabe der gewünschten Zeichenkette "HelloWorld!".
Der Aufbau dieser Anweisung wird ebenfalls in den folgenden Abschnitten erläutert.
Durch Verwendung von javac und java kann die gewünscht
Ausgabe auf dem Bildschirm erhalten werden:
> javac HelloWorld.java
> java HelloWorld
HelloWorld!
Objekt einer Klasse
Ein Objekt ist eine Instanz einer Klasse oder ein Array. Die Begriffe Objekt
und Instanz (einer Klasse) sollen gleichbedeutend verwendet werden. Von der
Klasse HelloWorld2, die im Quelltext HelloWorld2.java
definiert wird, soll ein Objekt erzeugt werden.
Listing 1.3. HelloWorld2.java
public class HelloWorld2 {
public void method1() {
System.out.println("Hello World!");
}
}
Die Klasse deklariert ebenfalls eine Methode, die eine Anweisung zur Ausgabe
einer Zeichenkette enthält. Da die Klasse aber keine main-Methode
beinhaltet, wird eine weitere Klasse benötigt, die zunächst ein Objekt von
HelloWorld2 erzeugt und anschließend mit Hilfe dieses Objekts die
Methode method1 aufruft, um die Ausgabe "HelloWorld!" auf dem Bildschirm
zu erzeugen. Wie dies im Einzelnen aussehen soll, zeigen die nächsten Zeilen.
Ein Objekt einer Klasse kann mit Hilfe des new-Operators
erzeugt werden. Dazu wird Speicherplatz angefordert bzw. belegt.
Falls nicht genügend Speicherplatz für das zu erzeugende Objekt zur Verfügung
steht, führt dies zu einer entsprechenden Fehlermeldung: OutOfMemoryError.
Um von der Klasse HelloWorld2 ein Objekt zu
erzeugen, kann zunächst eine Variable obj vom Klassentyp
HelloWorld2 deklariert werden. Der Objektvariablen obj
kann nun unter Verwendung von new ein entsprechender Referenzwert
(kurz: Referenz) zugeordnet werden.
HelloWorld2 obj;
obj = new HelloWorld2();
oder kürzer:
HelloWorld2 obj = new HelloWorld2();
Im Beispiel folgt nach dem Schlüsselwort new die Angabe des
Klassentyps HelloWorld2 gefolgt von einem leerem Klammerpaar.
Innerhalb dieser runden Klammern können Argumente angegeben werden, die einem
sogenannten Konstruktor übergeben werden können (siehe
dazu Abschnitt 1.4).
Die durch obj gespeicherte Referenz ist ein Zeiger auf dieses
Objekt. Es gibt auch eine spezielle Referenz: Die null-Referenz,
welche auf gar kein Objekt verweist. Sie ist der Default-Wert für alle Referenztypen.
Der folgende kurze Java-Quelltext erzeugt innerhalb der main-Methode
ein Objekt der Klasse HelloWorld2. Anschließend wird die Methode
mit dem Namen method1, die ein Member dieser Klasse ist, aufgerufen.
Dies geschieht, indem nach obj ein Punkt notiert wird, dem sich
der Name der aufzurufenden Methode anschließt (im Beispiel folgt danach ein leeres
Klammerpaar).
Listing 1.4. Test.java. Erzeugung eines Objekts der Klasse
HelloWorld2.
public class Test {
public static void main(String[] args) {
HelloWorld2 obj;
obj = new HelloWorld2();
obj.method1();
}
}
Nach der Übersetzung der beiden Dateien HelloWorld2.java und
Test.java in zugehörige Klassendateien (befinden sich im selben
Verzeichnis), kann mit der Anweisung
> java Test
die Bildschirmausgabe "HelloWorld!" erhalten werden.