Rumah >Java >javaTutorial >Apakah Perintah Sebenar Permulaan Medan dan Pelaksanaan Pembina di Jawa?

Apakah Perintah Sebenar Permulaan Medan dan Pelaksanaan Pembina di Jawa?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-11 15:00:19564semak imbas

What's the Actual Order of Field Initialization and Constructor Execution in Java?

Permulaan Medan dalam Pembina Java

Di Java, susunan pelaksanaan permulaan medan dan kod pembina telah menjadi topik kekeliruan. Kod yang disediakan menunjukkan tingkah laku ini:

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

Orang mungkin menjangkakan outputnya ialah "XZYY" berdasarkan andaian bahawa pembina dimulakan sebelum pembolehubah contoh. Walau bagaimanapun, output sebenar ialah "YYXZ":

  • Y(): Pembina kelas Y dipanggil.
  • Y(): Pembolehubah contoh 'b' dalam kelas X dimulakan dengan mencipta tika baharu 'Y'.
  • X(): Pembina kelas X dipanggil.
  • Y() baharu: Pembolehubah contoh 'y' dalam kelas Z dimulakan dengan mencipta tika baharu 'Y'.
  • Z(): Pembina kelas Z dipanggil.
Output ini bercanggah dengan susunan yang dijangkakan kerana permulaan medan (cth., 'b' dan 'y') berlaku sebelum pelaksanaan badan pembina (cth., 'X() ' dan 'Z()').

Spesifikasi Mesin Maya Java (JVM Spec) menjelaskan susunan permulaan sebagai berikut:

    Pemula pembolehubah statik dan blok pemulaan statik dilaksanakan.
  1. Panggilan super() dalam pembina, jika ada.
  2. Pemula dan contoh pembolehubah instance blok pemulaan dilaksanakan dalam susunan teks.
  3. Baki badan pembina, termasuk sebarang kod selepas super().
Oleh itu, dalam kod yang disediakan, pembolehubah contoh 'b' dan 'y' dimulakan sebelum badan pembina 'X' dan 'Z' dilaksanakan, menghasilkan output "YYXZ".

Atas ialah kandungan terperinci Apakah Perintah Sebenar Permulaan Medan dan Pelaksanaan Pembina di Jawa?. 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