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

Warum Java Kommentare immer ein Mittel der Kommunikation sind

Java Kommentare Kommunikation

Kennst Du die Bücherreihe „Miteinander reden“ von Schulz von Thun? Falls Du an der Uni warst oder bist, gehört dieses Buch zur Standardlektüre im Fach Schlüsselkompetenz. Denn ein Java Entwickler, welcher im Team arbeitet, muss klar und deutlich kommunizieren können. Und klar und deutlich heißt nicht, dass die Aussprache Deiner Worte verständlich sein soll. Nein […]

Java lernen – 10 nützliche Tipps für Java Anfänger

Java Lernen Anfänger

Wenn du die Programmiersprache Java lernen möchtest, bist du hier prinzipiell erst einmal richtig. Und wenn du es wirklich ernst meinst und in die Java Programmierung einsteigen möchtest, solltest du auch meinen kostenlosen Java Kurs beanspruchen. Wenn du dabei bist, bekommst du: Eine Lektion pro Woche zu den Basics. Hier geht es um die ersten […]

Die vier verschiedenen Zahlensysteme in der Java Programmierung

Java Zahlensysteme

Java Zahlensysteme – Was soll das? In sämtlichen Programmiersprachen werden Zahlen in Variablen abgespeichert. Wenn du dir die einzelnen primitiven Datentypen in Java einmal anschaust – wirst du feststellen – dass die Masse der Datentypen Zahlen annehmen und speichern können. Zahlen und die Mathematik dahinter spielen in der Programmierung eine sehr große Rolle. Ganz am […]

Du musst in Java nicht jede Exception fangen

Java Exception fangen

Kennst du die Metapher mit dem Jongleur und den Bällen? Ein Jongleur hält drei Bälle in der Luft, dann vier und irgendwann fünf. Aber irgendwann ist es genau ein Ball zu viel. Und Alles bricht zusammen. Ja ein Ball zu viel, kann alles versauen. 🙂 Und so ist es doch immer im Leben. Du kannst […]

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

So kannst du Java Arrays mit for Schleife füllen und auslesen

Java Arrays For Schleife

Wir haben in einem anderen Beitrag bereits über Java Arrays gesprochen. So ein Array speichert Zahlen, Texte oder Objekte in eine Art Liste. Und dann kannst du ganz bequem über den Index das Array füllen und die bereits enthaltenen Werte abrufen. Ganz bequem? So, wie ich dich aus dem letzten Beitrag entlassen habe, war das […]

So implementierst du Instanzmethoden in deine Java Klasse

Java Instanzmethoden

In einen der letzten Beiträge habe ich dir gezeigt, wie du eine Klasse anlegen kannst. Ich habe die Klasse „Mensch“ oder „Human“ angelegt und wir haben die erste Instanzvariable implementiert. Dein Code sollte jetzt so aussehen: public class Human { int size=156;//size in centimeter } In diesem Beitrag werde ich dir zeigen, wie du Java […]

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.

Java Vererbung findet auch zwischen Einkaufstüten und Polizeiautos statt

Java Vererbung

„Manchmal findet Java Vererbung auch zwischen Einkaufstüten und Polizeiautos statt“ Irrer Titel, oder? Aber mal Hand aufs Herz. Was haben eigentlich eine Einkaufstüte und ein Polizeiwagen gemeinsam? Ich verrate dir etwas: Du kannst die Verbindung nicht erkennen, denn ich habe dir nicht alles verraten. Es fehlt noch ein wichtiger Aspekt – eine Verbindung zwischen beiden. […]