Rumah > Java > javaTutorial > teks badan

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

Patricia Arquette
Lepaskan: 2024-10-24 16:20:02
asal
634 orang telah melayarinya

为什么未初始化的成员变量不会在 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>
Salin selepas log masuk

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!

sumber:php
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!