Skip to main content

Die 2 Phasen um Java Klassen zu initialisieren

Die Java Klassen Initialisierung durchläuft zwei Phasen.

Diese beiden Phasen sind im Grunde genommen, wie die Phasen 2 und 3 bei der Instanz-Initialisierung.

In Phase eins werden die Klassenvariablen der entsprechenden Java Klassen angelegt

Das heißt diese werden deklariert.

Schau dir den folgenden Code dazu an.
Uns interessiert jetzt erst einmal nur die Klassenvariable x.


public class KlassenInitialisierung {
public static int x=5; //statische Variable vom Datentyp Integer
int y; //Instanzvariable vom Datentyp Integer
 
public static void main (String [] args){
 
}
}

Es wird also java intern ein Speicherplatz für die Variable x reserviert.
Die Größe des reservierten Speicherplatzes ist wieder abhängig vom jeweiligen Datentyp.
Und das war es dann auch schon mit Phase eins.

In Phase zwei wird der Variablen dann ein Wert zugewiesen und es werden Methoden gepackt.

Jetzt, in Phase zwei, wird der Klassenvariablen der entsprechende Wert zugewiesen.


public class KlassenInitialisierung {
public static int x=5; //Zuweisung des Wertes 5 in Phase zwei der Java Klassen Initialisierung
int y; //Instanzvariable vom Datentyp Integer
 
public static void main (String [] args){
 
}
}

Das bedeutet:
Erst in Phase zwei bekommt die Variable den Wert 5 zugewiesen.

Außerdem werden jetzt die Instanzmethoden angelegt.
In diesem Beispiel siehst du die Instanzmethode zunehmenWerte(), welche den Wert der Instanzvariable erhöht.


public class KlassenInitialisierung {
public static int x=5; //statische Variable vom Datentyp Integer
int y; //Instanzvariable vom Datentyp Integer
 
public void zunehmenWerte(){ //Instanzmethode erhöht den Wert der Instanzvariablen
y=y+22;
System.out.println(y);
}
public static void main (String [] args){
 
}
}

Diese Methode wird jetzt java-intern als statische Methode gewandelt.
Diese würde dann als Argument ein Objekt der Klasse erwarten und die Instanzvariablen des Objektes erhöhen.
In diesem Fall heißt das Argument bzw. Variable ganz einfach „wert“.
Und diese Variable ist vom Datentyp „KlassenInititialsierung“.


public class KlassenInitialisierung {
public static int x=5; //statische Variable vom Datentyp Integer
int y; //Instanzvariable vom Datentyp Integer
 
public void zunehmenWerte(){ //Instanzmethode
y=y+22; //Erhöhung der Instanzvariablen
System.out.println(y); //Rückgabe von y
}
public static void zunehmenWerte(KlassenInitialisierung wert){ //abgewandelte Klassenmethode
wert.y=wert.y+22; //Erhöhung der Instanzvariablen
System.out.println(wert.y); //Rückgabe von y
}
public static void main (String [] args){
KlassenInitialisierung objektEins = new KlassenInitialisierung(); //Objekt erzeugen
objektEins.zunehmenWerte(); //Aufruf der Instanzmethode
zunehmenWerte(objektEins); //Aufruf der Java Klassen Methode
}
}

Klar ist, dass beide Methoden genau das Gleiche machen.
Rufe doch, so wie ich auch, beide Methoden einmal in der main-Methode auf und klicke auf „Run“.

Die Instanzvariable y wurde genau zweimal um 22 erhöht.
Nicht schlecht, oder? 🙂

Und genau das macht Java mit Instanzmethoden.
Intern werden diese bei der Klassen Initialisierung als statische Methoden gewandelt und geführt.

Das ganze spielt für dich erst einmal keine Rolle.
Was aber durchaus wichtig ist, ist der Unterschied zwischen der Instanz-Initialisierung und der Klassen-Initialisierung.

Also, worin liegt jetzt der Unterschied zur Instanz Initialisierung

Oder warum ist es wichtig, diese Phasen zu kennen.

Klar bei der Instanzinitialisierung durchläuft das Programm 4 Phasen.
Aber es gibt noch einen anderen Unterschied.
Und zwar, wie oft diese Phasen durchlaufen werden.

Ich verwende einmal zwei Codeblöcke um dies besser zu verdeutlichen.


public class KlassenInitialisierung {
public static int x=5; //statische Variable vom Datentyp Integer
int y; //Instanzvariable vom Datentyp Integer
 
{ //nicht statischer Initialisierungsblock
System.out.println("Instanzinitialisierung abgeschlossen");
}
 
static { //statische Initialsierungsblock
System.out.println("Klasseninitialisierung abgeschlossen");
}
 
public static void main (String [] args){
KlassenInitialisierung objektEins = new KlassenInitialisierung(); //Objekt erzeugen
KlassenInitialisierung objektZwei = new KlassenInitialisierung(); //neues Objekt erzeugen
}
}

Der erste Codeblock ist statisch. Dieser erzeugt die Bildschirmausgabe „Die Klasseninitialisierung ist abgeschlossen“.
Der zweite Codeblock ist nicht statisch. Dieser dient der Objekt- oder Instanzinitialisierung.

Wenn du jetzt innerhalb der main Methode zwei Objekte anlegst und dann auf „Run“ klickst…
Ja dann werden beide Initialisierungsblöcke durchlaufen.

Wichtig dabei ist, dass die Klasseninitialisierung nur einmal durchlaufen wird.
Und zwar genau dann, wenn die Klasse das aller erste Mal angesprochen wird.

Die Instanzinitialisierung wird aber bei jedem neuen Objekt durchlaufen.
Außerdem findet die Klasseninitialisierung vor der Objektinitialisierung statt.

Zusammenfassung:

  • Java Klassen werden initialisiert. Das bedeutet, sie werden intern angelegt.
  • Die ganze Java Klassen Initialisierung durchläuft zwei Phasen.
  • In Phase 1 werden die Klassenvariablen angelegt und in Phase zwei werden ihnen die entsprechenden Werte zugewiesen.

Ähnliche Beiträge

So nutzt du das Java Keyword public

Java Keyword public

Java Programme bestehen aus Java Klassen. Und der Zugriff auf eine Java Klasse sollte nach außen immer gewährleistet sein. Was bedeutet das? Du solltest in jeder Klasse die Möglichkeit haben, ein Objekt einer anderen Klasse anzulegen. Gerade durch diese Möglichkeit macht doch das ganze Klassenkonstrukt erst Sinn.

So kannst du Java Arrays anlegen

Java Arrays anlegen

Java Arrays– Was ist das? Stell es dir einmal als ein Bücherregal vor. In einem Bücherregal befinden sich sämtliche Bücher. Und diese befinden sich schön nebeneinander. Jedes Buch hat seinen festen Platz. Du kannst die Bücher ganz genau lokalisieren. Zum Beispiel kannst du sagen. Das erste Buch von links Das dritte von rechts usw. Und […]

So kannst du zweidimensionale Java Arrays anlegen und nutzen

Java Arrays zweidimensional

Eines der bedeutendsten Instrumente in der Mathematik ist das Koordinatensystem. Die gedankliche Grundlage dieses Werkzeuges lieferte der französische Naturwissenschaftler und Philosoph Rene Descartes. Man muss sich einmal verdeutlichen, was dies für die damalige Zeit bedeutete. Bisher wurden mathematische Probleme lediglich durch Berechnungen gelöst. Denke an geometrische Figuren, wie Dreiecke und Vierecke. Der Umfang wurde lediglich […]

Java Konsolenausgaben mit formatierten Zahlen

Java Konsolenausgaben Zahlen

Java Konsolenausgaben erzeugst du mit der System.out.println()-Anweisung. Dies ist relativ einfach. Aber es ist mitunter nicht ganz praktisch. Und zwar immer dann, wenn Zahlen im Spiel sind. Die Zahlen welche dann auf deiner Java Konsole erscheinen, sind unformatiert. Sie haben zu viele Kommastellen. Oder für eine bessere Darstellung benötigst du den Tausenderpunkt. Vielleicht möchtest du […]

Drei Möglichkeiten um Java Objekte zu zerstören

Java Objekte zerstören

Java Objekte leben genau solange, wie eine Referenzvariable auf sie zeigt. Wenn dieser Zeiger nicht mehr existiert, wird dieses Objekt aufgeben. Und wenn dieses Objekt erst einmal aufgegeben wurde, dann kommt der Garbage Collector und entsorgt dieses. Aber wie kannst du nun am Sinnvollsten Objekte aufgeben? Lass es uns herausfinden.

Der Java Datentyp boolean im Interview

Java boolean

Nein, ich bin nicht verrückt. Aber… Neulich traf ich zufällig den Java Datentyp boolean. 🙂 Er erklärte sich bereit, mir ein Interview zu geben. In diesem Interview geht es um die Werte, welcher dieser Wertetyp annehmen kann. Und in diesem Zusammenhang geht es auch um Logik. Also lassen wir uns doch die Logik vom direkten […]

Java Übung 31: Speichere deine Würfe im Array

Java Übung Array Würfelspiel

In dieser Java Übung soll ein Würfelspiel simuliert werden. Lege eine Klasse namens, Würfelspiel an. Diese Klasse enthält eine statische Methode, namens würfeln(). Diese Methode erwartet einen Parameter vom Datentyp Integer, namens „anzahlWuerfe“. Diese Variable/Parameter repräsentiert die Anzahl der Würfe. Nachdem der Methode die Anzahl der Würfe übergeben wurde, soll die Methode Zufallszahlen zwischen 1 […]

So kannst du mit dem StringTokenizer Java Strings zerlegen oder splitten

Java StringTokenizer Java Strings teilen zerlegen splitten

Java StringTokenizer – was ist das? Bevor ich diese Frage kläre, schiebe ich eine zweite Frage hinterher. Denn im Wort Tokenizer steckt das Wort Token. Also was ist ein Token? Hier die Definition zum Token: Ein Token ist eine bestimmte Aneinanderreihung von Zeichen. Man kann auch sagen, eine lexikalische Einheit. Das kann zum Beispiel eine […]

Die drei Bestandteile aller Java Klassen

Java Klassen Bestandteile

Java ist eine objektorientierte Programmiersprache. Was heißt das? Ja… Anscheinend hat es etwas mit Objekten zu tun. Also was ist ein Objekt? Ein Objekt ist ein bestimmtes Konstrukt im Programm. Bauen wir ein Spiel. Ein Grafik-Adventure. Du kennst das. Ein Held wird in eine bestimmte Spielwelt hinein gesteckt. Der Held muss mit bestimmten Personen sprechen. […]

So verwendest du die Java Codeblöcke zur Automatisierung

Java Codeblöcke

In diesem Beitrag geht es um den Einsatz von Java Codeblöcken oder Initialisierungsblöcken. Viele Wege führen nach Rom. Oder Alle Wege führen nach Rom. Heißt es in einem alten Sprichwort. Und so ähnlich ist es bei der Java Programmierung. In diesem Beitrag möchte ich dir einen weiteren Weg vorstellen, wie du Variablen eines Java Objektes […]

So erstellst du deine ersten Java Klassen mit Eclipse

Java Klassen sind Baupläne für Java Objekte. Und da Java eine objektorientierte Programmiersprache ist, sind Java Klassen somit ein elementarer Bestandteil. In diesem Beitrag möchte ich dir zeigen, wie du eine Java Klasse in Eclipse erstellen kannst. Ich möchte dir außerdem zeigen, was physikalisch in deinem Projekt passiert. Ganz zum Schluss zeige ich dir noch, […]