Rumah > Java > javaTutorial > Mengapa Medan Java Saya Nol Walaupun Dimulakan dalam Pembina?

Mengapa Medan Java Saya Nol Walaupun Dimulakan dalam Pembina?

Susan Sarandon
Lepaskan: 2024-11-29 18:03:10
asal
863 orang telah melayarinya

Why Are My Java Fields Null Despite Initialization in the Constructor?

Kekeliruan dalam Java Field Initialization: The Role of Shadowing

Apabila mengisytiharkan dan memulakan medan dalam pembina kelas, anda mungkin menghadapi kejadian yang membingungkan : medan kekal batal atau mengekalkan nilai lalainya walaupun terdapat usaha pemulaan anda. Ini berlaku disebabkan oleh fenomena yang dikenali sebagai membayang.

Skop dan Bayang

Setiap entiti di Java mempunyai skop, yang menentukan di mana ia boleh dirujuk menggunakan nama mudahnya. Apabila anda mengisytiharkan medan dalam kelas, ia mempunyai skop yang merangkumi seluruh badan kelas, termasuk pengisytiharan bersarang.

Pembolehubah Tempatan lwn. Medan

Dalam pembina, anda mungkin secara tidak sengaja memperkenalkan pembolehubah tempatan dengan nama yang sama seperti medan anda. Pembolehubah tempatan mempunyai skop yang lebih sempit, hanya meluas dalam badan pembina. Apabila pembolehubah tempatan diisytiharkan dengan nama yang sama seperti medan, ia membayangi medan, bermakna pembolehubah tempatan diutamakan dalam skopnya.

Contoh Membayangkan:

Pertimbangkan kod ini:

public class Sample {

    private String[] elements;
    private int capacity;

    public Sample() {
        int capacity = 10;
        String[] elements;
        elements = new String[capacity];
    }
}
Salin selepas log masuk

Di sini, pembayang pembina menyebabkan kekeliruan. Kapasiti pembolehubah tempatan dan elemen diutamakan berbanding medan, menyebabkan ahli medan kekal batal atau dimulakan kepada nilai lalainya (0 untuk int, nol untuk rujukan).

Potensi Penyelesaian:

Untuk mengelakkan bayang-bayang, pertimbangkan untuk menggunakan nama unik untuk pembolehubah setempat atau secara eksplisit merujuk kepada medan menggunakan nama yang layak (cth., ini.elemen, ini.kapasiti). Contohnya:

public Sample() {
    this.capacity = 10;
    this.elements = new String[capacity];
}
Salin selepas log masuk

Kejadian Lain Pembayang

Bayangan juga boleh berlaku dengan parameter pembina. Jika parameter pembina mempunyai nama yang sama dengan medan, parameter diutamakan dalam badan pembina. Untuk mengakses medan dalam kes sedemikian, gunakan nama yang layak dengan ini.

Pengesyoran Pengelakan:

Untuk mengelakkan tingkah laku yang tidak dijangka akibat membayangi, biasanya dinasihatkan untuk menggunakan yang berbeza nama untuk medan, pembolehubah tempatan dan parameter pembina.

Atas ialah kandungan terperinci Mengapa Medan Java Saya Nol Walaupun Dimulakan dalam Pembina?. 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