Kekeliruan terhadap Permulaan Medan Akibat Pembayangan
Di Jawa, pembayangan merujuk kepada fenomena di mana pembolehubah yang diisytiharkan dalam skop mengaburkan pembolehubah dengan nama yang sama diisytiharkan dalam skop luar. Dalam coretan kod yang disediakan:
class StringArray { private String[] elements; private int capacity; public StringArray() { int capacity = 10; // Local variable shadowing field String[] elements; // Local variable shadowing field elements = new String[capacity]; } // Getters omitted for brevity }
Bayang Pembolehubah Tempatan
Pernyataan pertama dan kedua di dalam badan pembina mengisytiharkan pembolehubah setempat dinamakan kapasiti dan elemen. Pembolehubah tempatan ini membayangi pembolehubah contoh dengan nama yang sama. Akibatnya, sebarang tugasan atau rujukan kepada kapasiti dan elemen dalam skop pembina secara eksklusif mempengaruhi pembolehubah setempat.
Peraturan Bayangan
Peraturan pembayangan menentukan bahawa pembolehubah tempatan mempunyai keutamaan yang lebih tinggi daripada pembolehubah contoh dalam skopnya. Ini bermakna kapasiti pembolehubah tempatan, yang dimulakan kepada 10, diutamakan berbanding kapasiti pembolehubah contoh, menjadikan pembolehubah contoh tidak dimulakan. Begitu juga, tugasan kepada elemen memulakan pembolehubah tempatan, bukan pembolehubah contoh.
Permulaan Medan
Memandangkan pembolehubah tika tidak dimulakan secara eksplisit dalam pembina, ia adalah memberikan nilai lalai untuk jenis masing-masing: 0 untuk kapasiti dan nol untuk elemen. Inilah sebabnya mengapa kaedah pengambil dalam kelas mengembalikan nilai lalai ini.
Resolusi
Untuk menyelesaikan isu ini, hapuskan pengisytiharan pembolehubah setempat dan rujuk terus pembolehubah contoh :
public StringArray() { this.capacity = 10; this.elements = new String[this.capacity]; }
Mengelak
Untuk mencegah kekeliruan sedemikian, mengamalkan amalan menggunakan nama unik untuk pembolehubah tempatan dan pembolehubah contoh.
Atas ialah kandungan terperinci Mengapa Pembolehubah Instance Java Saya Tidak Dimulakan Walaupun Nampak Dimulakan dalam Pembina?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!