Initialisierungsreihenfolge von Feldern und Konstruktorcode in Java
In einem Java-Programm kann die Reihenfolge der Initialisierung von Feldern und der Ausführung von Konstruktorcode verwirrend sein, insbesondere was den Vorrang zwischen den beiden betrifft. Die Java Virtual Machine Specification beschreibt jedoch eine klare Abfolge von Ereignissen, die die richtige Reihenfolge bestimmt:
-
Statische Variablen und Blöcke: Zuerst werden statische Variablen und statische Initialisierungsblöcke initialisiert Textreihenfolge, vorausgesetzt, dass ihre Klasse nicht zuvor initialisiert wurde.
-
Aufruf des Super-Konstruktors: Als nächstes wird super() Der Aufruf wird innerhalb des Konstruktors entweder explizit oder implizit ausgeführt. Dieser Aufruf ruft den Konstruktor der übergeordneten Klasse auf.
-
Feldinitialisierung und Blöcke: Nach dem super()-Aufruf werden Instanzvariablen zusammen mit allen zugehörigen Instanzinitialisierungsblöcken in Textreihenfolge initialisiert.
-
Konstruktorkörper: Zuletzt wird der verbleibende Körper des Konstruktors ausgeführt, nachdem der super()-Aufruf ausgeführt wurde abgeschlossen.
Im bereitgestellten Codeausschnitt wird aufgrund der angegebenen Initialisierungsreihenfolge die Ausgabe „YZXZ“ generiert. Lassen Sie es uns Schritt für Schritt aufschlüsseln:
- Statische Initialisierer und statische Variablen sind im Code nicht vorhanden.
- Der Konstruktoraufruf Z() wird ausgeführt und ruft den Superklassenkonstruktor X( von Z auf) ) implizit.
- Der Superklassenkonstruktor X() wird ausgeführt und gibt „X“ an die aus Konsole.
- Die Instanzvariable y in der Z-Klasse wird initialisiert und gibt „Y“ auf der Konsole aus.
- Die Instanzvariable b in der X-Klasse wird initialisiert und gibt „Z“ auf der Konsole aus Konsole (da Z die aktuelle Unterklasse ist).
Daher spiegelt die Ausgabe „YZXZ“ korrekt die von der Java Virtual Machine definierte Reihenfolge der Initialisierung und Ausführung wider Spezifikation.
Das obige ist der detaillierte Inhalt vonWie ist die genaue Initialisierungsreihenfolge von Feldern und Konstruktoren in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!