Rumah >Java >javaTutorial >Mengapa Program Java Ini Menghasilkan 'YYXZ' Daripada 'XZYY'?

Mengapa Program Java Ini Menghasilkan 'YYXZ' Daripada 'XZYY'?

Susan Sarandon
Susan Sarandonasal
2024-12-16 19:31:11841semak imbas

Why Does This Java Program Output

Memahami Susunan Permulaan dalam Pembina Java

Apabila membina objek dalam Java, adalah penting untuk memahami susunan permulaan. Soalan ini timbul: "Bolehkah sesiapa menjelaskan output program berikut?"

Kod:

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();
    }
}

Output yang dijangkakan ialah "XZYY" di bawah andaian bahawa pembina dimulakan sebelum contoh pembolehubah. Walau bagaimanapun, output sebenarnya adalah "YYXZ." Sisihan ini menyerlahkan kepentingan memahami susunan permulaan sebenar.

Menurut Spesifikasi Mesin Maya Java, susunan permulaan adalah seperti berikut:

  1. Pemula pembolehubah statik dan blok pemula statik, dalam susunan teks.
  2. Panggilan super() dalam pembina, sama ada eksplisit atau tersirat.
  3. Pemula pembolehubah contoh dan blok pemulaan contoh, dalam susunan teks.
  4. Baki isi pembina selepas super().

Dalam kes ini, statik pembolehubah dan blok tidak terlibat. Panggilan super() berlaku secara tersirat dalam pembina kelas Z, jadi ia tidak kelihatan dalam kod. Oleh itu, susunan pemula ialah:

  1. Pemula pemboleh ubah contoh kelas X (b)
  2. Pemula pembolehubah contoh kelas Y (y)
  3. Ibu pembina kelas X (cetak "X")
  4. Badan pembina kelas Z (cetakan "Z")

Ini menerangkan output "YYXZ."

Atas ialah kandungan terperinci Mengapa Program Java Ini Menghasilkan 'YYXZ' Daripada 'XZYY'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn