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

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

So kannst du deine Java Methoden ausführen

Java Methoden ausführen

Du hast die ersten Java Methoden erstellt. Doch wie greifst du jetzt auf diese zu? Wie kannst du diese Methoden in einer anderen Klassen aufrufen? Welcher Unterschied, hinsichtlich des Methodenaufrufes, besteht eigentlich zwischen deinen Java Methoden? Diese Fragen möchte ich gern in diesem Beitrag beantworten. Gehen wir dazu in den Garten und schauen uns Blumen […]

Das Java Leben ist einfacher mit For-Schleife

Java For Schleife Aufbau

In einem anderen Artikeln habe ich bereits über Schleifen in Java gesprochen. In diesem Artikel möchte ich dir eine ganz besondere Schleife vorstellen. Warum ist diese so toll? Sie hat einen integrierten Schleifenzähler. Die Schleife zählt also bei jedem Durchlauf automatisch mit. Aber dazu gleich mehr…. Lass uns einmal so eine For Schleife anlegen.

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

Ein Java Fenster erzeugen mit dem JFrame

Java-Fenster-erzeugen

Ein Java Fenster erzeugen mit Swing. Java Swing – was ist das? Zum Erstellen von grafischen Benutzeroberflächen, kurz GUI, bietet Java eine eigene Standardklasse an. Diese Klasse nennt sich Swing. Aus dieser Swing-Klasse heraus können Objekte erstellt werden. Diese Objekte lassen sich in vier verschiedene Kategorien einteilen. Fenster und Dialoge bilden das Grundgerüst einer grafischen […]

So legst du Utility Klassen in Java an

Java Utility Klassen

Utility Java Klassen – was ist das? Man nennt diese auch Hilfsklassen von Java. Diese Utility Klassen sind Java Klassen, welche lediglich Methoden und Konstanten anbieten. Am Beispiel: Die Klasse Math ist so eine klassische Utility Klasse. Wozu braucht man solche Klassen? Diese Klassen sind so etwas wie ein Werkzeugkoffer für jedes Java Programm. Hier […]

Java Duales Zahlensystem – Binäre Zahlen in Java umwandeln

Java Dual System

Das duale Zahlensystem hat viele Bezeichnungen. Oft wird auch es Dualsystem oder Binärsystem genannt. Es besteht aber immer aus 2 Zahlen. Man verwendet oft die Zahlen 0 und 1. Es können aber auch sämtliche anderen Zahlenpaare sein. Zum Beispiel 7 und 175 sind für sich genommen, auch ein normales Zahlenpaar und somit ein Dualsystem. Mit […]

Java Objekte leben auf dem Heap

Java-Objekte-Heap

Java hat eine interne Speicherverwaltung. Eigentlich ist es nicht nur eine. Es sind mehrere.   Uns interessieren nur zwei. Methoden und lokale Variablen werden auf dem Stack verwaltet. Und die Speicherverwaltung für Java Objekte und den Instanzvariablen findet auf dem Heap statt.   Ja wieso braucht Java eigentlich zwei Speichersysteme?   Es ist ganz einfach. […]

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

So kannst du ein neues Java Projekt mit Eclipse anlegen und konfigurieren

Java Projekt anlegen Eclipse

In diesem Beitrag möchte ich dir zeigen, wie du ein neues Java Projekt mit Eclipse anlegen kannst. Ich werde dir außerdem einen kurzen Überblick über die Konfigurationsmöglichkeiten geben. Dann gebe ich dir noch eine ganz einfache Schritt-für-Schritt-Anleitung für dein allererstes Java Projekt und ich zeige dir, was nach dem Anlegen des Projektes eigentlich passiert ist.

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