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
Lepaskan: 2024-12-11 15:00:19
asal
532 orang telah melayarinya

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();
    }
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan