Heim >Java >javaLernprogramm >Warum gibt dieses Java-Programm „YYXZ' anstelle von „XZYY' aus?
Verstehen der Initialisierungsreihenfolge in Java-Konstruktoren
Beim Erstellen eines Objekts in Java ist es wichtig, die Reihenfolge der Initialisierung zu verstehen. Es stellt sich die Frage: „Kann jemand die Ausgabe des folgenden Programms klären?“
Der Code:
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(); } }
Die erwartete Ausgabe war „XZYY“ unter der Annahme, dass Konstruktoren vor der Instanz initialisiert werden Variablen. Die Ausgabe lautet jedoch tatsächlich „YYXZ“. Diese Abweichung unterstreicht, wie wichtig es ist, die tatsächliche Initialisierungsreihenfolge zu verstehen.
Gemäß der Java Virtual Machine-Spezifikation lautet die Initialisierungsreihenfolge wie folgt:
In diesem Fall sind die statischen Variablen und Blöcke nicht beteiligt. Der super()-Aufruf erfolgt implizit im Konstruktor der Klasse Z, sodass er im Code nicht sichtbar ist. Daher lautet die Initialisierungsreihenfolge:
Dies erklärt die Ausgabe „YYXZ.“
Das obige ist der detaillierte Inhalt vonWarum gibt dieses Java-Programm „YYXZ' anstelle von „XZYY' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!