Skip to main content

Die 4 wichtigen Phasen der Instanz-Initialisierung im Java Programm


java programmierung objekte erstellen

Wie werden aus deinen Java Klassen richtig nützliche Java Objekte?

Das ganze läuft in vier Phasen ab.
Und diese Phasen möchte ich dir in diesem Beitrag vorstellen.

Ob das nützlich ist?
Schau dir das Bild an.

Java-Objekt-Fehlermeldung

Am Ende dieses Beitrages wirst du wissen, warum Eclipse dir hier eine Fehlermeldung gibt und wie du dieses Problem lösen kannst.

Na Interesse?
Na dann sind hier die vier Phasen der Java Objekt Erstellung.

Phase 1: Alle Java Objekte werden durch die Anweisung new erstellt.

Schau dir diese Klasse einmal an.

public class ObjektErstellung {
private int zaehler; //Instanzvariable
 
public ObjektErstellung() { //Konstruktor
}
 
public static void main(String[] args) {
ObjektErstellung erstesObjekt = new ObjektErstellung(); //Anweisung um zum Java Objekt erstellen
}
}

Um ein Java Programm zu starten, benötigst du die main-Methode.
Und somit beginnt die Reise immer dort.

In der main-Methode befindet sich die Anweisung, um ein neues Java Objekt zu erstellen.
Dabei wird zuerst der Datentyp festgelegt.
Dieser entspricht dem Klassennamen.

Java-Objekt-Datentyp

Danach folgt der Name des Objektes bzw. der Instanz.
In diesem Fall „erstesObjekt“.
Unter diesem Namen wird die Referenz im Hauptspeicher verwaltet.

Dann erfolgt die Zuweisung in Form des Gleichheitszeichens.

Java-Objekt-erstellen-Zuweisung

Dann folgt das Keyword new.
Java-Objekt-erstellen-new

Dies ist die Anweisung, dass ein neues Objekt angelegt werden soll.
Java-Objekt-erstellen-Konstruktoraufruf

Hinter dem new Keyord befindet sich der Aufruf des Konstruktor.
Du kannst in jeder Klasse mehrere verschiedene Konstruktoren anlegen.
Hier legst du fest, mit welchem Konstruktor das Objekt erschaffen werden soll.

In dieser Klasse haben wir lediglich einen parameterlosen Konstruktor.
Und diesen rufst du auf und erschaffst dein Java Objekt.

Das war es schon mit Phase eins.

In Phase zwei wird die Instanzvariable deklariert

Alle wichtigen Dinge werden verpackt und gespeichert.

In der Java Klasse siehst du die Instanzvariable „zaehler“.
Jetzt wird diese Instanzvariable deklariert.

Java-Objekt-erstellen-Variable-deklarieren

Es wird somit ein konkreter Speicherplatz für diese Variable reserviert.
In diesem Fall wird ein Speicherplatz in Höhe eines Integer-Datentypen angelegt und für die Variable „zaehler“ reserviert.

In Phase drei wird der Instanzvariablen ein Wert zugewiesen

Und deshalb kommt es auch zur eingangs erwähnten Fehlermeldung.

Java-Objekt-Fehlermeldung

Auf diesem Bild siehst du, dass eine Instanzvariable angelegt wurde.
Und der Compiler liest den Code von oben nach unten.
Hat der Compiler den kompletten Code in Phase 2 durchgearbeitet werden alle Instanzvariablen angelegt.

Und jetzt steckt der Compiler in Phase zwei (Variablendeklaration) und es soll einer Variablen, welche noch nicht existiert einen Wert zuweisen.
Das geht natürlich nicht.

Also solltest du den Wert bei der Deklaration zuweisen.

public class ObjektErstellung {
private int zaehler=2; //Deklaration und Zuweisung
 
public ObjektErstellung() { //Konstruktor
}
 
public static void main(String[] args) {
ObjektErstellung erstesObjekt = new ObjektErstellung(); //Anweisung um zum Java Objekt erstellen
}
}

Aber auch dann werden in Phase 2, die Variablen angelegt.
Und erst in Phase drei, wenn alle Variablen deklariert wurden, wird dieser ein Wert zugewiesen.

Phase drei kannst du auch mit separaten Codeblöcken vollziehen.

Ein Codeblock beginnt mit einer öffnenden Klammer und endet mit einer schließenden Klammer.

public class ObjektErstellung {
private int zaehler; //Phase 2 - Deklaration der Instanzvariablen
{
System.out.println("Instanzvariable angelegt. Wert = "+zaehler);//Phase 3 - Zuweisung der Instanzvariablen
}
 
public ObjektErstellung() { //Konstruktor
}
 
public static void main(String[] args) {
ObjektErstellung erstesObjekt = new ObjektErstellung(); //Phase 1 - Erstellung des Objektes 
}
}

Und innerhalb dieses Blockes kannst du der Instanzvariablen einen Wert zuweisen.
Um das Ganze zu testen, befindet sich im Codeblock die Anweisung für die Konsolenausgabe.

Da in diesem Beispiel der Instanzvariablen noch kein Wert zugewiesen wurde, bekommt diese in Phase 3 einen default-Wert.

Jeder primitive Datentyp hat seinen eigenen default-Wert.
In diesem Fall bekommt die Integer Variable den Wert 0.

In Phase 4 werden die Anweisungen im Konstruktorrumpf ausgeführt.

Das Java Objekt wurde jetzt komplett angelegt.

Jetzt im Konstruktorrumpf kann der Instanzvariablen ein neuer Wert zugewiesen werden.

Um die ganzen vier Ablaufphasen besser zu demonstrieren, schau dir diesen Code einmal.

public class ObjektErstellung {
	private int zaehler;	

	public ObjektErstellung() { //Konstruktor
		zaehler=2;
		System.out.println("Phase 4. Konstruktorrumpf wird ausgeführt");
		System.out.println("Die Instanzvariable hat jetzt den Wert " +zaehler);
	}
	
	public static void main(String[] args) {
		System.out.println("Phase 1: Konstruktor wird aufgerufen");
		ObjektErstellung erstesObjekt = new ObjektErstellung();
	}
	{
		System.out.println("Phase 2: Instanzvariable angelegt.");
		System.out.println("Phase 3: Instanzvariable wurde der default-Wert "+zaehler+" zugewiesen.");
	}
}

Ganz bewusst sind die Codeblöcke (Phase 2 und 3) unter dem Konstruktor.

Wenn du diesen Code einmal ausführst, dein Programm also startest, wirst du bemerken:

  • Der Compiler führt den Code nicht strikt von oben nach unten aus.
  • Stattdessen erfolgt die Ausführung der einzelnen Programmanweisungen nach den vier beschriebenen Phasen.

Zusammenfassung:

  • Die Objekt-Erstellung durchläuft vier Phasen.
  • In der ersten Phase werden die Java Objekte angelegt. Dazu wird ein Speicherplatz für dieses Objekt reserviert.
  • In Phase 2 wird ein Speicherplatz für die Instanzvariablen reserviert.
  • In Phase 3 werden den Instanzvariablen die Werte zugewiesen.
  • Erst in Phase 4 wird der Code im Konstruktorrumpf ausgeführt.

Ähnliche Beiträge