Menganalisis dan menyelesaikan punca dan kaedah pengecualian penunjuk nol

WBOY
Lepaskan: 2023-12-28 09:50:55
asal
1168 orang telah melayarinya

Menganalisis dan menyelesaikan punca dan kaedah pengecualian penunjuk nol

Pengecualian penuding nol ialah ralat yang sering dihadapi semasa program berjalan. Apabila kita menggunakan objek null, seperti memanggil kaedah pada objek null atau mengakses sifat objek null, pengecualian penuding nol akan berlaku. Artikel ini akan menganalisis punca Pengecualian Penunjuk Null dan membincangkan cara membetulkannya.

Pengecualian penuding nol biasanya disebabkan oleh sebab berikut:

  1. Objek tidak instantiated: Sebelum mencipta objek dalam atur cara, kita perlu menggunakan kata kunci new untuk membuat instantiate objek. Jika anda menggunakan objek yang belum dijadikan instantiated, pengecualian penuding nol berlaku. new关键字来实例化一个对象。如果在使用一个未被实例化的对象时,就会出现空指针异常。
  2. 对象被显示设置为null:在程序中,我们有时会将一个对象的值设置为null。当我们试图访问这个被设置为null的对象的属性或方法时,就会抛出空指针异常。
  3. 方法返回null:有时,某个方法会返回一个对象,但是这个对象可能为null。如果在调用这个方法的返回值时没有进行空值校验,就有可能出现空指针异常。

下面我们将分别通过代码示例来说明这些原因。

  1. 对象未被实例化:
public class NullPointerExample {
    public static void main(String[] args) {
        // 创建一个未被实例化的对象
        String str;
        
        // 调用未被实例化对象的方法,会抛出空指针异常
        str.length();
    }
}
Salin selepas log masuk

上述代码中,我们创建了一个未被实例化的对象str,并试图调用它的length()方法,就会抛出空指针异常。

  1. 对象被显示设置为null:
public class NullPointerExample {
    public static void main(String[] args) {
        // 创建一个对象并将其设置为null
        String str = null;
        
        // 调用null对象的方法,会抛出空指针异常
        str.length();
    }
}
Salin selepas log masuk

上述代码中,我们将一个String对象str设置为null,然后试图调用str的length()方法,同样会抛出空指针异常。

  1. 方法返回null:
public class NullPointerExample {
    public static void main(String[] args) {
        // 调用返回null的方法
        String str = getNullString();
        
        // 调用返回null的方法的方法,会抛出空指针异常
        str.length();
    }
    
    public static String getNullString() {
        return null;
    }
}
Salin selepas log masuk

上述代码中,我们调用了一个返回null的方法getNullString(),然后试图调用返回值str的length()方法,同样会抛出空指针异常。

针对以上几种情况,我们可以采取以下修复方法:

  1. 对象未被实例化:在使用一个未被实例化对象之前,需要先进行实例化操作。可以使用new关键字来创建一个对象,确保对象被正确地初始化。
  2. 对象被显示设置为null:在使用一个对象之前,需要先进行空值校验。可以使用if语句来判断对象是否为null,如果对象为null,则进行相应的处理。
  3. 方法返回null:在使用一个方法返回的对象之前,同样需要先进行空值校验。可以使用if
  4. Objek ditetapkan secara eksplisit kepada null: Dalam atur cara, kadangkala kita menetapkan nilai objek kepada null. Apabila kita cuba mengakses harta atau kaedah objek ini yang ditetapkan kepada null, pengecualian penuding nol dilemparkan.

Kaedah mengembalikan nol: Kadangkala, kaedah mengembalikan objek, tetapi objek ini mungkin batal. Jika semakan nol tidak dilakukan semasa memanggil nilai pulangan kaedah ini, pengecualian penuding nol mungkin berlaku.

Di bawah ini kami akan menggambarkan sebab-sebab ini melalui contoh kod.

🎜Objek tidak instantiated: 🎜🎜
public class NullPointerExample {
    public static void main(String[] args) {
        // 对象未被实例化问题修复
        String str = new String();
        
        // 对象被显示设置为null问题修复
        if (str != null) {
            str.length();
        }
        
        // 方法返回null问题修复
        String str2 = getNullString();
        if (str2 != null) {
            str2.length();
        }
    }
    
    public static String getNullString() {
        return null;
    }
}
Salin selepas log masuk
🎜Dalam kod di atas, kami mencipta object str yang belum instantiated dan cuba memanggil kaedah length()nya, pengecualian penuding nol akan dilemparkan. 🎜
    🎜Objek ditetapkan secara eksplisit kepada null: 🎜🎜rrreee🎜Dalam kod di atas, kami menetapkan objek String str kepada null, dan kemudian cuba memanggil kaedah length() str, yang juga akan membuang pengecualian Penunjuk nol. 🎜
      🎜Kaedah mengembalikan null: 🎜🎜rrreee🎜Dalam kod di atas, kami memanggil kaedah getNullString() yang mengembalikan null, dan kemudian cuba memanggil kaedah length() yang mengembalikan nilai str , yang juga akan membuang pengecualian penunjuk Null. 🎜🎜Untuk situasi di atas, kita boleh mengambil kaedah pembaikan berikut: 🎜🎜🎜Objek tidak instantiated: Sebelum menggunakan objek uninstantiated, anda perlu membuat instantiate terlebih dahulu. Anda boleh menggunakan kata kunci new untuk mencipta objek dan memastikan objek itu dimulakan dengan betul. 🎜🎜Objek ditetapkan secara eksplisit kepada null: sebelum menggunakan objek, semakan nilai nol diperlukan. Anda boleh menggunakan pernyataan if untuk menentukan sama ada objek itu batal Jika objek itu batal, lakukan pemprosesan yang sepadan. 🎜🎜Kaedah mengembalikan null: Sebelum menggunakan objek yang dikembalikan melalui kaedah, pengesahan nilai nol juga perlu dilakukan. Anda boleh menggunakan pernyataan if untuk menentukan sama ada objek yang dikembalikan oleh kaedah tersebut adalah batal Jika objek itu adalah batal, lakukan pemprosesan yang sepadan. 🎜🎜🎜Contoh kod yang dibaiki adalah seperti berikut: 🎜rrreee🎜Dalam kod yang dibaiki, kami menggunakan operasi instantiation untuk menyelesaikan masalah objek yang tidak instantiated; kami menggunakan semakan nilai nol untuk membetulkan objek yang dipaparkan sebagai Masalah null ; Semakan nilai null juga digunakan untuk menyelesaikan masalah kaedah mengembalikan null. 🎜🎜Melalui analisis dan perbincangan kaedah pembaikan di atas, kita boleh lebih memahami dan menyelesaikan masalah pengecualian penunjuk nol. Semasa menulis atur cara, kita harus sentiasa memberi perhatian kepada tempat di mana pengecualian penunjuk nol mungkin berlaku untuk mengelakkan ralat menjalankan program. Pada masa yang sama, anda juga harus memberi perhatian kepada kaedah panggilan yang mungkin mengembalikan null dan melakukan pengesahan nilai null tepat pada masanya untuk memastikan keteguhan dan kestabilan program. 🎜

Atas ialah kandungan terperinci Menganalisis dan menyelesaikan punca dan kaedah pengecualian penunjuk nol. 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
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!