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:
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"); } }
Wenn die Hauptmethode ausgeführt wird, wird die folgende Ausgabe generiert:
Static - Grandparent Static - Parent Static - Child
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!