Skip to main content

So verwendest du die Java Codeblöcke zur Automatisierung

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 initialisieren kannst.

Das ganze geschieht mit Initialisierungsblöcken.

Was ist das?
Initialisierungsblöcke sind eigentlich nur Java Codeblöcke, welche du schon aus Methoden, Klassen oder Konstruktoren kennst.

Wenn du dir diese Beispiel Klasse „InitialisierungsBlock“ einmal anschaust.
Dann ist da nichts ungewöhnliches.

public class InitialisierungsBlock {
int zaehler; // Instanzvariable wird deklariert
 
public static void main(String[] args) {
InitialisierungsBlock blockEins = new InitialisierungsBlock();// neues Objekt wird angelegt
blockEins.zaehler = 2; // Der Instanzvariablen wird der Wert 2 zugewiesen
System.out.println(blockEins.zaehler); // Gibt Wert der Instanzvariablen zurück
}
 
}

Du hast eine Instanzvariable Zähler.
Einen Konstruktor und eine main-Methode für den Programmstart.

In der main-Methode wird ein Java Objekt erzeugt.
Dann wird der Wert der Instanzvariablen zugewiesen.

Und dieser Wert wird dann aus Kontrollzwecken über die Konsolenausgabe zurückgegeben.

Diese Vorgehensweise habe ich schon sehr ausführlich, in dem Einführungsbeispiel zur Java Programmierung, erläutert.
Also nichts Neues.

Aber das Ganze geht auch anders.

Und zwar kannst du Codeblöcke einsetzen und innerhalb dieser Codeblöcke den Variablen Werte zuweisen.
Und so sieht dies dann aus.


public class InitialisierungsBlock {
int zaehler; // Instanzvariable wird deklariert
 
{ // Codeblock weist den Wert der Instanzvariablen zu.
zaehler = 2;
} 
 
public static void main(String[] args) {
InitialisierungsBlock blockEins = new InitialisierungsBlock();
System.out.println(blockEins.zaehler); // Gibt Wert vom Zähler zurück
}
 
}

So ein Codeblock wird über eine öffnende Klammer geöffnet.
Dann erfolgt die Anweisung. (Zuweisung des Wertes)
Und zum Schluss schließt du den Codeblock über eine Klammer.

Und innerhalb des Blockes kannst du sämtliche Anweisungen platzieren.
Diese werden dann automatisch ausgeführt, sobald du eines neues Java Objekt anlegst.

Somit kann die println()-Anweisung, welche den Zählerwert zurückgibt aus der main-Methode verschwinden.
Und stattdessen wird diese im Codeblock untergebracht.


public class InitialisierungsBlock {
int zaehler; // Instanzvariable wird deklariert
 
{ // Codeblock weist den Wert der Instanzvariablen zu.
zaehler = 2;
System.out.println(zaehler); // Gibt Wert vom Zähler zurück
} 
 
public static void main(String[] args) {
InitialisierungsBlock blockEins = new InitialisierungsBlock();
InitialisierungsBlock blockZwei = new InitialisierungsBlock();
InitialisierungsBlock blockDrei = new InitialisierungsBlock();
}
 
}

Jedes Mal, sobald ein Objekt angelegt wird, wird jetzt der Wert der Instanzvariablen zurückgegeben.
Cool, oder? 🙂

Und natürlich kannst du in diesen Codeblöcken auch auf alle Java Klassenvariablen zugreifen

Nur ganz kurz.
Im Beispiel habe ich eine zweite Variable, eine Klassenvariable, angelegt.
Und auch bei dieser wird der Wert im Codeblock verändert und dann zurückgegeben.


public class InitialisierungsBlock {
int zaehler; // Instanzvariable wird deklariert
static int zaehlerZwei; //Klassenvariable
 
{ // Codeblock weist den Wert der Instanz- und Klassenvariablen zu.
zaehler = 2;
zaehlerZwei=15;
System.out.println("zaehler="+zaehler); // Gibt Wert vom Zähler zurück
System.out.println("zaehlerZwei="+zaehlerZwei);//Gibt den Wert der Klassenvariable zurück
} 
 
public static void main(String[] args) {
InitialisierungsBlock blockEins = new InitialisierungsBlock();
InitialisierungsBlock blockZwei = new InitialisierungsBlock();
InitialisierungsBlock blockDrei = new InitialisierungsBlock();
}
 
}

Neben den Codeblöcken für Instanzen existieren auch noch Codeblöcke für Klassen

Statische Codeblöcke werden durch das Java Keywort static gekennzeichnet.

Im statischen Kontext kannst du nicht ohne weiteres auf Instanzvariablen zugreifen.
Wie auch in statischen Methoden, muss dann innerhalb des Codeblockes eine Instanz bzw. ein Objekt erzeugt werden.


public class InitialisierungsBlock {
int zaehler; // Instanzvariable wird deklariert
static int zaehlerZwei; // Klassenvariable
 
static { // Codeblock weist den Wert der Instanz- und der Klassenvariablen zu.
InitialisierungsBlock blockVier = new InitialisierungsBlock();
blockVier.zaehler = 2;
zaehlerZwei = 15;
System.out.println("zaehler=" + blockVier.zaehler);
System.out.println("zaehlerZwei=" + zaehlerZwei);
}
 
public static void main(String[] args) {
 
}
 
}

Der statische Codeblock wird allerdings nur einmal ausgeführt.
Und zwar bei der Klassen Initialisierung.

Du kannst beliebig viele Java Objekte erzeugen – Dieser Block wird nur einmal durchlaufen.

In beiden Codeblöcke würden auch lokale Java Variablen existieren

Du könntest zum Beispiel eine lokale Variable anlegen und dir deren Wert zurückgeben lassen.

Wichtig ist die Tatsache, dass diese lokale Variable außerhalb nicht existiert.
Durch die schließende Klammer des Codeblockes wird diese Java Variable zerstört.


public class InitialisierungsBlock {
 
static { 
int x =22;
System.out.println(x);
}//Zerstörung der lokalen Variablen
 
static {//zweiter Codeblock hat keinen Zugriff auf x
System.out.println(x);//Fehlermeldung
}
 
public static void main(String[] args) {
 
}
 
}

Der zweite Codeblock hat deshalb keinen Zugriff mehr auf diese Variable.
Auch in der main-Methode kannst du diese lokale Variable nicht verwenden.

Das gleiche Prinzip gilt bei der Schachtelung von Codeblöcken

Lokale Variable existieren nur nach unten, nicht nach oben.

Was heißt das?
Dazu zwei Beispiele.


public class InitialisierungsBlock {
 
static {
int x = 22;
{
System.out.println(x);//Funktioniert
}
}
 
public static void main(String[] args) {
 
}
 
}

In diesem Beispiel wurde die lokale Variable x auf oberste Ebene des Codeblockes angelegt.
Diese existiert weiterhin auch in hierarchisch unterliegenden Ebenen.


public class InitialisierungsBlock {
 
static {
{//Öffnung zweite Ebene
int x = 22;
} //Schließung zweite Ebene und Zerstörung der lokalen Variablen
System.out.println(x);//Funktioniert nicht
}
 
public static void main(String[] args) {
 
}
 
}

Dieses Beispiel funktioniert nicht, da die lokale Variable in einer untergeordneten Ebene angelegt wurde.
Und dann kannst du auf einer hierarchisch höheren Ebene nicht auf diese zugreifen.

Zusammenfassung:

  • Java Codeblöcke lassen sich direkt in der Klassenebene einbinden.
  • Java bietet dir Codeböcke für den statischen, als auch für den nichtstatischen Kontext an.
  • Die Codeblöcke lassen sich außerdem schachteln.

Na wie sieht es bei dir aus – Nutzt du Codeblöcke in deinen Java Programmen?
Teil mir doch deine Erfahrungen mit und hinterlasse einen Kommentar unter diesem Beitrag.


Ähnliche Beiträge

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 […]

Die sechs Bestandteile von Java Methoden

Java Methoden Bestandteile

Java Methoden hauchen deinem Java Programm Leben ein. Ohne eine Methode würde deine Java Klasse ein starres Konstrukt sein. Deine Objekte hätten Eigenschaften. Aber sie könnten nichts machen. Und das wäre eine trostlose Welt. Java Methoden sorgen also dafür, dass Objekte interagieren. Methoden bestehen aus bestimmten Bausteinen. Und diese Bausteine bestimmen, was die Methode darf […]

Ohne Abstraktion ergibt Java Polymorphie wenig Sinn

Java Polymorphie Abstraktionsprinzip

Kennst du den Film Matrix? Denn kennst du vielleicht auch die Botschaft, welche der Protagonist am Anfang des Filmes erhält. „Folge dem weißen Kaninchen.“ Und so ähnlich ist es jetzt auch in diesem Beitrag. „Wir dringen immer tiefer in den Kaninchenbau ein.“ 🙂 Ganz so wie im Film wird es nicht. Aber bevor wir mit […]

Java For Each Schleife – Aufbau und Funktionsweise

Java for each Schleife

In einer anderen Lektion habe ich dir bereits gezeigt, wie du ein Java Array mit einer for-Schleife füllen und dir später die Werte zurückgeben lassen kannst. Es gibt allerdings einen weiteren Schleifentyp, welche geradezu prädestiniert ist für Java Arrays. Dieser Schleifentyp nennt sich for each Schleife. In diesem Beitrag möchte ich dir zeigen, wie du […]

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 24 – So kannst du Kommazahlen runden

Java Übung runden

In dieser Java Übung möchte ich mit dir Zahlen runden. Ich bitte dich deshalb: Erstelle eine Klasse „RundenUebung“. Lege dann eine statische Methode rundeZahl() an. Diese erwartet zwei Parameter. Parameter 1 ist die Kommazahl, welche gerundet werden soll. Als zweiten Parameter wird eine ganze Zahl übergeben, welche die Nachkommastelle – bis auf welche letztlich gerundet […]

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 […]

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 […]