Rumah  >  Artikel  >  Java  >  Mengapa Beberapa Pembolehubah Tidak Dimulakan Boleh Disusun Sementara Yang Lain Menyebabkan Ralat di Java?

Mengapa Beberapa Pembolehubah Tidak Dimulakan Boleh Disusun Sementara Yang Lain Menyebabkan Ralat di Java?

DDD
DDDasal
2024-10-24 14:05:30998semak imbas

Why Are Some Uninitialized Variables Compilable While Others Cause Errors in Java?

Memulakan Pembolehubah dalam Java: Memahami Perbezaan antara Ahli Tempatan dan Instance

Di Java, permulaan pembolehubah yang betul adalah penting untuk kefungsian kod. Artikel ini meneroka perlakuan yang berbeza bagi pembolehubah tempatan yang tidak dimulakan dan ahli contoh.

Pertimbangkan coretan kod berikut:

<code class="java">public class TestClass {

    private String a;
    private String b;

    public TestClass() {
        a = "initialized";
    }

    public void doSomething() {
        String c;

        a.notify(); // This is fine
        b.notify(); // This will throw a runtime exception
        c.notify(); // Compile-time error: "Local variable c may not have been initialized"
    }

}</code>

Kekeliruan timbul daripada fakta bahawa kedua-dua b dan c tidak dimulakan. Walau bagaimanapun, b tidak menimbulkan ralat masa kompilasi seperti yang dilakukan c. Mengapakah percanggahan itu?

Ahli Contoh (Medan)

Java memulakan pembolehubah contoh jenis objek kepada null secara lalai. Walaupun b tidak dimulakan secara eksplisit, ia menunjuk kepada null. Ini kerana medan diperuntukkan apabila objek dibuat, dan null ialah nilai yang sah untuk jenis rujukan. Oleh itu, b.notify() boleh dipanggil tanpa menghadapi ralat.

Pembolehubah Setempat

Sebaliknya, pembolehubah tempatan tidak dimulakan secara automatik. Mereka kekal tidak dimulakan sehingga diberikan nilai secara eksplisit. Percubaan untuk mengakses pembolehubah tempatan yang tidak dimulakan menghasilkan ralat masa kompilasi. Ini jelas dalam kes c, yang tidak diberikan nilai sebelum ia digunakan.

Spesifikasi Bahasa

Spesifikasi Bahasa Java (JLS) mentakrifkan peraturan ini dalam Bahagian 4.12.5:

Pembolehubah contoh jenis kelas (rujukan objek) dimulakan kepada null nilai khas secara lalai.
Pembolehubah tempatan jenis kelas (objek rujukan) tidak dimulakan secara lalai dan ia adalah ralat masa kompilasi jika program cuba mengakses satu yang belum dimulakan.

Atas ialah kandungan terperinci Mengapa Beberapa Pembolehubah Tidak Dimulakan Boleh Disusun Sementara Yang Lain Menyebabkan Ralat di Java?. 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