Heim >Java >javaLernprogramm >Warum gibt dieses Java-Programm „YYXZ' anstelle von „XZYY' aus?

Warum gibt dieses Java-Programm „YYXZ' anstelle von „XZYY' aus?

Susan Sarandon
Susan SarandonOriginal
2024-12-16 19:31:11841Durchsuche

Why Does This Java Program Output

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:

  1. Statische Variableninitialisierer und statische Initialisierungsblöcke, in Textreihenfolge.
  2. Der super()-Aufruf im Konstruktor, ob explizit oder implizit.
  3. Instanz Variableninitialisierer und Instanzinitialisierungsblöcke, in Textreihenfolge.
  4. Verbleibender Körper des Konstruktors nach super().

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:

  1. Instanzvariableninitialisierer der Klasse X (b)
  2. Instanzvariableninitialisierer der Klasse Y (y)
  3. Konstruktorkörper der Klasse X (gibt „X“ aus)
  4. Konstruktorkörper der Klasse Z (druckt „Z“)

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!

Stellungnahme:
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