Rumah > Java > javaTutorial > Mengapa Pembolehubah Instance Java Saya Tidak Dimulakan Walaupun Nampak Dimulakan dalam Pembina?

Mengapa Pembolehubah Instance Java Saya Tidak Dimulakan Walaupun Nampak Dimulakan dalam Pembina?

Patricia Arquette
Lepaskan: 2024-12-04 10:43:10
asal
718 orang telah melayarinya

Why Are My Java Instance Variables Uninitialized Despite Appearing to Be Initialized in the Constructor?

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

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

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!

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