Heim >Java >javaLernprogramm >Wie ist die tatsächliche Reihenfolge der Feldinitialisierung und Konstruktorausführung in Java?
Feldinitialisierung in Java-Konstruktoren
In Java sorgte die Ausführungsreihenfolge der Feldinitialisierung und des Konstruktorcodes für Verwirrung. Der bereitgestellte Code demonstriert dieses Verhalten:
class X { Y b = new Y(); X() { System.out.print("X"); } } class Y { Y() { System.out.print("Y"); } } public class Z extends X { Y y = new Y(); Z() { System.out.print("Z"); } public static void main(String[] args) { new Z(); } }
Man könnte erwarten, dass die Ausgabe „XZYY“ ist, basierend auf der Annahme, dass Konstruktoren vor Instanzvariablen initialisiert werden. Die eigentliche Ausgabe ist jedoch „YYXZ“:
Diese Ausgabe widerspricht der erwarteten Reihenfolge, da die Feldinitialisierung (z. B. 'b' und 'y') vor der Ausführung von Konstruktorkörpern (z. B. 'X()' und 'Z') erfolgt ()').
Die Java Virtual Machine Specification (JVM Spec) legt die Reihenfolge der Initialisierung wie folgt fest:
Daher wird im bereitgestellten Code der Die Instanzvariablen „b“ und „y“ werden initialisiert, bevor die Konstruktorkörper von „X“ und „Z“ ausgeführt werden, was zur Ausgabe „YYXZ“ führt.
Das obige ist der detaillierte Inhalt vonWie ist die tatsächliche Reihenfolge der Feldinitialisierung und Konstruktorausführung in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!