Heim > Java > javaLernprogramm > Wie ist die Ausführungsreihenfolge von statischen und Instanzinitialisiererblöcken in Java?

Wie ist die Ausführungsreihenfolge von statischen und Instanzinitialisiererblöcken in Java?

Barbara Streisand
Freigeben: 2024-11-24 08:28:09
Original
875 Leute haben es durchsucht

What's the Execution Order of Static and Instance Initializer Blocks in Java?

Ausführungsreihenfolge von statischen und Instanz-Initialisierungsblöcken in Java

Bei der Arbeit mit Java-Klassen ist es wichtig, die Reihenfolge zu verstehen, in der statische und Instanz-Initialisierungsblöcke ausgeführt werden Instanzinitialisierungsblöcke werden ausgeführt. Diese Blöcke führen wichtige Vorgänge wie das Zuweisen von Anfangswerten und das Initialisieren von Klassen- und Objektmitgliedern aus.

Instanzinitialisierungsblöcke

Instanzinitialisierungsblöcke, eingeschlossen in geschweifte Klammern { }, werden ausgeführt jedes Mal, wenn eine Instanz einer Klasse erstellt wird. Sie werden in der Reihenfolge ausgeführt, in der sie im Code innerhalb der Klasse erscheinen. Dieses Verhalten ist in allen Klassen konsistent.

Statische Initialisierungsblöcke

Statische Initialisierungsblöcke, ebenfalls in geschweifte Klammern { } eingeschlossen und mit dem Schlüsselwort static versehen, werden ausgeführt, wenn Die Klasse wird geladen. Sie sind keiner bestimmten Instanz zugeordnet und werden nur einmal ausgeführt, unabhängig von der Anzahl der erstellten Instanzen.

Spezifische Ausführungsreihenfolge

Die Java Language Specification (JLS) definiert eine bestimmte Reihenfolge für die Ausführung statischer Initialisierungsblöcke:

  1. Statische Initialisierungsblöcke der übergeordneten Klasse werden ausgeführt Zuerst.
  2. Als nächstes werden die statischen Initialisierungsblöcke der direkten Unterklasse ausgeführt.
  3. Diese Reihenfolge wird rekursiv befolgt, bis alle Unterklassen ihre statischen Initialisierungsblöcke ausgeführt haben.

Beispiel

Betrachten Sie den folgenden Code Beispiel:

class Grandparent {
    static { System.out.println("Static - Grandparent"); }
}

class Parent extends Grandparent {
    static { System.out.println("Static - Parent"); }
}

class Child extends Parent {
    static { System.out.println("Static - Child"); }
}
Nach dem Login kopieren

Wenn die Hauptmethode ausgeführt wird, wird die folgende Ausgabe generiert:

Static - Grandparent
Static - Parent
Static - Child
Nach dem Login kopieren

Dies zeigt, dass die statischen Initialisierungsblöcke in der Reihenfolge übergeordnetes Element -> ausgeführt werden. Unterklasse.

Ausnahmen

Es gibt eine bemerkenswerte Ausnahme von dieser Regel. Wenn die übergeordnete Klasse eine Klasse definiert, auf die nie verwiesen wird, wird ihr statischer Initialisierungsblock nicht ausgeführt. Dies liegt daran, dass der Klassenlader nur Klassen initialisiert, die explizit erforderlich sind.

Das obige ist der detaillierte Inhalt vonWie ist die Ausführungsreihenfolge von statischen und Instanzinitialisiererblöcken in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage