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 kannst du Java installieren

Java installieren

Bevor du loslegst und deine ersten Java Programme schreibst, benötigst du die entsprechende Arbeitsumgebung. Du solltest also Java installieren. Und diese Arbeitsumgebung beinhaltet dann Bibliotheken für die einzelnen Java-Standard-Klassen, Dateien um deine Programme auszuführen. Dateien um deine Programme zu packen, Logische Verzeichnisstrukturen

So organisierst und verwaltest du ganz bequem deine Java Projekte

Du kennst das auch. Denn du bist ja fleißig. Und weil du so fleißig bist, hast du mitunter auch mehrere Java Projekte gleichzeitig laufen. Und dann kommt es vor, dass du enorm viele Java Projekte am Laufen hast. Und dein Package-Explorer wird extrem unübersichtlich. In diesem Beitrag möchte ich dir zwei Varianten vorstellen, wie du […]

Du bekommst was du vereinbarst – Die Rückgabewerte von Java Methoden

Java Methoden Rückgabetypen

Was du vereinbarst, das bekommst du zurück. Ach wäre es schön, wenn alles im Leben so funktionieren würde. Aber zum Glück funktioniert dieses Prinzip bei deinen Java Methoden. Denn du kannst den Rückgabetypen im Methodenkopf vereinbaren. Doch bevor ich dir zeige, wie du den Rückgabetypen anlegen kannst…. Lass mich dir zeigen, wofür du den Kram […]

So nutzt du getter und setter Methoden bei der Java Programmierung

Java Keyword private

In diesem Artikel möchte ich dir zeigen, wie du Instanzvariablen innerhalb der Java Klasse schützt. Und den Zugriff nur noch indirekt über getter und setter Methoden anbietest. Stell dir vor. Du hast ein Programm zur Lagerverwaltung geschrieben. Dieses Programm dient Möbelhäusern dazu, ihre Bestände zu verwalten. Und das Programm erwartet vom Nutzer gewisse Eingaben zu […]

Von Java Klassen zum Java Programm – Der Programmstart

Java Klassen ausführen

In den letzten Beiträgen hast du gelernt, wie Java Klassen erstellt werden und aufgebaut sind. In diesem Beitrag geht es um den Programmstart. Ich will dir zeigen, was nötig ist, dass du ein Java Programm ausführen kannst. Und ich zeige dir außerdem, wie du eine Startklasse in einem x-beliebigen Javaprogramm anlegst. Wie auch schon zuvor, […]

So kannst du Java Methoden überladen

Java Methoden überladen

Im Mittelalter war es üblich, dass Könige oder Adlige Briefe durch ein Siegel verschlossen. Das Siegel hatte die Aufgabe den Inhalt des Briefes vor dem gewaltsamen Öffnen zu schützen. Außerdem hatte das Siegel die Aufgabe einen Eigentumsnachweis sicher zu stellen. Und jeder, welcher das Siegel des Königs sah, wusste: „Das königliche Siegel – Oh ein […]

Java lernen durch ständiges Testen – Nutze die Testumgebung von Eclipse

Java Programmierung lernen

Probieren geht über studieren Wenn du wirklich Java Programmierung lernen möchtest, dann solltest du Java nicht aus einem Buch lernen. Du solltest auch nicht strikt von dieser oder anderen Webseiten lernen. Etwas wirklich zu lernen, setzt die Bereitschaft voraus, etwas zu probieren. Denn nur durch eigenes Probieren gelangst du zum Wesentlichen. Durch Probieren wirst du […]

Achte bei Java Methoden stets auf die Wertübergabe

Java Methoden Wertübergabe

Ich lege gleich los…. Schau dir diesen Code einmal an. Welche Zahl wird wohl auf der Bildschirmanzeige zurückgegeben? public class MethodenWertUebergabe { static int verdoppele (int i){ i=i*2; return i; } public static void main(String[] args) { int i = 2; verdoppele(i); System.out.println(i); } }

Lassen wir Java rechnen – Die Rechenoperationen für Variablen

Java rechnen

Ich liebe Mathe. In der Biographie „Der Mann, der die Zahlen liebte“, stellt Paul Hoffmann das Mathematikgenie Paul Erdös vor. Erdös war eines der größten Genies des 20 Jahrhunderts. Er arbeitete mit zahlreichen Wissenschaftlern zusammen und verfasste durchschnittlich mehr Publikationen im Jahr, als andere Mathematiker im ganzen Leben. Da Erdös sich mit sehr vielen Theoremen […]

So kannst du Java Konstruktoren anlegen und überladen

Java Konstruktoren

Der Name sagt es schon. Java Konstruktoren konstruieren oder bauen Java Objekte. Und diese Objekte baut der Konstruktor auf Vorlage der entsprechenden Java Klasse. In diesem Beitrag zeige ich dir natürlich verschiedene Ansätze wie du den Konstruktor einsetzt. Ich zeige dir dies Schritt für Schritt. Dabei zeige ich dir auch verschiedene Dinge, welche nicht funktionieren. […]

So kannst du in Java Und Verknüpfung anlegen und auswerten

Java Und

In Java stehen dir eine Menge Operatoren zur Verfügung. Einer dieser Operatoren ist der Und-Operator. Dies ist ein logischer Operator, da dieser sogenannte Wahrheitswerte mit einander verknüpft. Also…. Was erwartet dich in diesem Beitrag? Zuerst möchte ich dir die Aussagenlogik hinter dem Und-Operator zeigen. Also wann sind Aussagen wahr und wann sind diese falsch. Dann […]

Nutze die Fernbedienung für deine Java Objekte

Auf Java Objekte greifst du mit einer Art Fernsteuerung zu. Diese bezeichnet man als Referenz oder als Verweis. Und diese Referenzvariablen möchte ich dir jetzt einmal vorstellen. Doch bevor wir loslegen, lass mich noch ein paar Dinge loswerden. 🙂 Ich habe es ja schon einmal in einem früheren Beitrag erwähnt. Java unterscheidet zwischen primitiven und […]