Heim  >  Artikel  >  Java  >  Detaillierte Einführung in den Instanzinitialisierungsblock (IIB) in Java (Codebeispiel)

Detaillierte Einführung in den Instanzinitialisierungsblock (IIB) in Java (Codebeispiel)

不言
不言nach vorne
2018-10-15 15:41:062205Durchsuche

Dieser Artikel bietet Ihnen eine detaillierte Einführung (Codebeispiel) zum Instanzinitialisierungsblock (IIB). Ich hoffe, dass er Ihnen weiterhilft.

Klasseninitialisierungsblock in der Java-Sprache In diesem Artikel haben wir kurz den Instanzinitialisierungsblock (IIB) in Java vorgestellt. Ich denke jedoch, dass die Einführung etwas einfach ist, daher werde ich einen weiteren Artikel schreiben, um sie ausführlich vorzustellen.

In der Java-Sprache gibt es drei Operationen: Methoden, Konstruktoren und Initialisierungsblöcke.

Der Initialisierungsblock ist in einen Instanzinitialisierungsblock (IIB) und einen statischen Initialisierungsblock unterteilt. In diesem Kapitel stellen wir hauptsächlich den Instanzinitialisierungsblock vor.

Der Instanzinitialisierungsblock wird zum Initialisieren von Instanzvariablen verwendet.

Der Instanzinitialisierungsblock wird beim Initialisieren einer Instanz der Klasse ausgeführt und vor dem Konstruktor ausgeführt. Und sie werden jedes Mal ausgeführt, wenn ein Objekt der Klasse erstellt wird.

Syntax des Instanziierungsblocks

Der Instanzinitialisierungsblock wird im Allgemeinen vor dem Konstruktor platziert, wobei geschweifte Klammern {} verwendet werden, um den Code zu erweitern. Die Syntaxstruktur ist im Allgemeinen wie folgt

class JavaTester 
{ 
    // 实例化块 
    {  
        System.out.println("IIB block"); 
    } 
     
    // 构造函数
    JavaTester() 
    { 
        System.out.println("Constructor Called"); 
    } 
    public static void main(String[] args) 
    { 
        JavaTester a = new JavaTester(); 
    } 
}

Beachten Sie, dass für Klassen keine Instanziierungsblöcke erforderlich sind. Nur eine Option. Es wird verwendet, um den öffentlichen Teil des Konstruktors zu extrahieren und separat auszuführen.

Dieser Code kann kompiliert und ausgeführt werden, und die Ergebnisse sind wie folgt

[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester
IIB block
Constructor Called

Eine Klasse enthält mehrere Instanzinitialisierungsblöcke

Instanzinitialisierungsblock ist für die Klasse nicht erforderlich und es gibt keine Begrenzung der Anzahl. Eine Klasse kann keinen Instanzinitialisierungsblock oder mehrere Instanzinitialisierungsblöcke haben.

Wenn eine Klasse über mehrere Instanzinitialisierungsblöcke verfügt, werden diese in der Reihenfolge von oben nach unten ausgeführt, d. h. der oben in der Klasse definierte Instanzinitialisierungsblock wird zuerst ausgeführt.

Schauen wir uns einen Codeabschnitt an. Die folgende Klasse JavaTester definiert mehrere Instanzinitialisierungsblöcke.

class JavaTester 
{ 
    {  
        System.out.println("IIB1 block 1 "); 
    } 
    
    { 
        System.out.println("IIB2 block 2"); 
    } 
       
    JavaTester() 
    { 
        System.out.println("Constructor Called"); 
    } 
      
    { 
        System.out.println("IIB3 block 3"); 
    } 
     
    public static void main(String[] args) 
    { 
        JavaTester a = new JavaTester(); 
    } 
}

Führen Sie den obigen Code aus, das Ausgabeergebnis ist wie folgt

[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester
IIB1 block 1 
IIB2 block 2
IIB3 block 3
Constructor Called

Initialisierungsblock in der übergeordneten Klasse

Im Vererbungssystem von Java Sprache können die übergeordneten Klassen auch Initialisierungsblöcke haben, und es gibt keine Begrenzung der Anzahl.

Der Instanzinitialisierungsblock der übergeordneten Klasse wird unmittelbar nach dem Aufruf von

im Konstruktor der untergeordneten Klasse ausgeführt. Der Compiler führt den Instanzinitialisierungsblock der übergeordneten Klasse aus, bevor er den Instanzinitialisierungsblock der aktuellen Klasse ausführt. super()

Ist das nicht verwirrend? Schreiben wir einen Code, um es zu demonstrieren.

class B 
{ 
    B() 
    { 
        System.out.println("B-Constructor Called"); 
    } 
  
    { 
        System.out.println("B-IIB block"); 
    } 
  
}

public class JavaTester extends B 
{ 
    {  
        System.out.println("JavaTester IIB1 block 1 "); 
    } 
    
    { 
        System.out.println("JavaTester IIB2 block 2"); 
    } 
       
    JavaTester() 
    { 
        super(); 
        System.out.println("JavaTester-Constructor Called");
    } 
      
    { 
        System.out.println("JavaTester IIB3 block 3"); 
    } 
     
    public static void main(String[] args) 
    { 
        JavaTester a = new JavaTester(); 
    } 
}

Führen Sie das obige Beispiel aus und die Ausgabe ist wie folgt

[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester
B-IIB block
B-Constructor Called
JavaTester IIB1 block 1 
JavaTester IIB2 block 2
JavaTester IIB3 block 3
JavaTester-Constructor Called
Aus den laufenden Ergebnissen Beim Erstellen eines Klassenobjekts von JavaTester versucht der Compiler, den Konstruktor der Klasse JavaTester auszuführen. Da es jedoch eine übergeordnete Klasse hat, wechselt es nach dem Erkennen der

-Anweisung dazu, zuerst den Konstruktor der übergeordneten Klasse auszuführen. super()

Daher ist im Vererbungssystem die Ausführungsreihenfolge der Instanzinitialisierungsblöcke und Konstruktoren wie folgt

  1. Führen Sie den Instanzinitialisierungsblock der übergeordneten Klasse aus

  2. Führen Sie den Konstruktor der übergeordneten Klasse aus

  3. Führen Sie den Instanzinitialisierungsblock der aktuellen Klasse aus

  4. Führen Sie den aus Konstruktor der aktuellen Klasse

Die Hauptpunkte des Instanzinitialisierungsblocks

Lassen Sie uns die Hauptpunkte des Instanzinitialisierungsblocks überprüfen.

  • Instanzinitialisierungsblöcke werden jedes Mal ausgeführt, wenn eine neue Instanz erstellt wird

  • Initialisierungsblöcke werden in der Reihenfolge ausgeführt, in der sie in der Klasse erscheinen

  • Wenn eine übergeordnete Klasse vorhanden ist, wird zuerst die übergeordnete Klasse instanziiert, dann wird der Instanzinitialisierungsblock der aktuellen Klasse aufgerufen und schließlich wird der Konstruktor der aktuellen Klasse aufgerufen.

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in den Instanzinitialisierungsblock (IIB) in Java (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen