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.