Rumah  >  Artikel  >  Java  >  Mengapa pembolehubah ahli yang tidak diinisialisasi menyebabkan ralat masa kompilasi dalam Java?

Mengapa pembolehubah ahli yang tidak diinisialisasi menyebabkan ralat masa kompilasi dalam Java?

Patricia Arquette
Patricia Arquetteasal
2024-10-24 16:20:02626semak imbas

为什么未初始化的成员变量不会在 Java 中导致编译时错误?

Pembolehubah Tidak Dimulakan dan Ahli di Java

Di Java, pembolehubah yang tidak diberikan nilai awal secara eksplisit kadangkala boleh membawa kepada tingkah laku yang tidak dijangka, kerana dicontohkan dalam 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 end in an exception
        c.notify(); // "Local variable c may not have been initialized"
    }

}</code>

Timbul persoalan: mengapa pembolehubah ahli b, yang tidak pernah dimulakan, tidak menyebabkan ralat masa kompilasi seperti pembolehubah tempatan c, yang mesti dimulakan sebelum gunakan?

Perbezaan antara Pembolehubah Tempatan dan Ahli

Spesifikasi Bahasa Java mentakrifkan tingkah laku ini secara eksplisit. Pembolehubah contoh (seperti a dan b) jenis objek mempunyai nilai lalai nol, manakala pembolehubah tempatan (seperti c) jenis objek tidak. Ini bermakna pengkompil memperlakukan pembolehubah tika tidak dimulakan secara berbeza daripada pembolehubah tempatan tidak dimulakan.

Pembolehubah Contoh

Pembolehubah tika dimulakan kepada nol secara lalai, menunjukkan bahawa ia tidak merujuk kepada sebarang objek. Akibatnya, mengakses pembolehubah contoh yang tidak dimulakan tidak akan mengakibatkan ralat masa kompilasi, tetapi ia mungkin menimbulkan ralat masa jalan jika pembolehubah digunakan tanpa terlebih dahulu diberikan nilai yang sah.

Pembolehubah Setempat

Pembolehubah setempat, sebaliknya, tidak mempunyai nilai lalai. Oleh itu, mengakses pembolehubah tempatan yang tidak dimulakan akan mengakibatkan ralat masa kompilasi. Pengkompil menguatkuasakan peraturan ini untuk mengelakkan kemungkinan ralat masa jalan yang boleh timbul daripada menggunakan pembolehubah tidak dimulakan.

Kesimpulan

Tingkah laku pembolehubah tidak dimulakan dalam Java ditentukan oleh spesifikasi bahasa dan berbeza bergantung pada sama ada ia pembolehubah contoh atau pembolehubah tempatan. Pembolehubah instance dilalaikan kepada null, manakala pembolehubah tempatan mesti dimulakan secara eksplisit kepada nilai yang sah sebelum digunakan untuk mengelakkan ralat masa kompilasi.

Atas ialah kandungan terperinci Mengapa pembolehubah ahli yang tidak diinisialisasi menyebabkan ralat masa kompilasi dalam 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