Das Erzeugen eines neuen Exemplars einer Klasse läuft in folgenden Schritten ab:
- Zuerst wird ein Speicherbereich belegt, der das neue Exemplar aufnimmt. Bei diesem Schritt werden auch die Datenelemente mit den Initialwerten der jeweiligen Datentypen belegt.
- Als nächstes werden die Konstruktoren aller Oberklassen entlang der Vererbungshierarchie nach oben ausgeführt. Falls ein Konstruktor hierbei nicht explizit einen Konstruktor der Oberklasse mit super aufruft, wird der parameterlose
Konstruktor der Oberklasse verwendet.
- Anschließend werden die Datenelemente, die in der Deklaration eine Zuweisung enthalten, mit den entsprechenden Werten belegt.
- Dann werden die Exemplar-Initialisierungsteile in der Reihenfolge ihrer Deklaration ausgeführt, sofern es welche gibt.
- Als Letztes wird der Code des aufgerufenen Konstruktors ausgeführt.
Dieser Ablauf sei an folgendem Beispiel verdeutlicht:
class A {
public A() {
System.out.println("A");
}
}
class B extends A {
int x = 1;
{ System.out.println("1. Exemplar-Initialisierung: "+x); }
public B() {
System.out.println("B: "+x);
}
{ System.out.println("2. Exemplar-Initialisierung: "+x); }
}
Die Anweisung new B() liefert die Ausgabe:
A
1. Exemplar-Initialisierung: 1
2. Exemplar-Initialisierung: 1
B: 1
Besonders zu beachten ist, dass der Konstruktor von A gemäß der ersten Regel zur Ausführung kommt, obwohl er nicht ausdrücklich in B() aufgerufen wird.