Rumah > Java > javaTutorial > Petua untuk Mengelakkan NullPointerException dalam Java

Petua untuk Mengelakkan NullPointerException dalam Java

DDD
Lepaskan: 2025-01-03 00:04:38
asal
331 orang telah melayarinya

1. Apakah NullPointerException (NPE) dalam Java?

Tips to Avoid NullPointerException in Java

NullPointerException berlaku apabila program Java anda cuba menggunakan rujukan objek yang belum dimulakan (iaitu, menunjuk ke null). Ini boleh berlaku dalam pelbagai senario seperti memanggil kaedah pada objek nol, mengakses atau mengubah suai medan objek nol atau menghantar objek nol kepada kaedah yang mengharapkan hujah bukan nol.

Senario Biasa Di Mana NullPointerException Berlaku

Memahami tempat NPE biasanya berlaku boleh membantu anda mengelakkannya secara proaktif. Berikut ialah beberapa senario biasa:

  • Percubaan untuk mengakses sifat objek yang tidak dimulakan.
  • Menggunakan koleksi (cth., Senarai, Peta) yang mungkin mengembalikan nol.
  • Gagal mengendalikan potensi nilai nol yang dikembalikan oleh perpustakaan atau kaedah.

2. Teknik Berkesan untuk Mengelakkan NullPointerException

Mengelakkan NullPointerException lebih kepada amalan pengaturcaraan yang baik daripada perkara lain. Berikut ialah beberapa strategi yang berkesan:

2.1 Gunakan Kelas Pilihan Java

Kelas Pilihan, yang diperkenalkan dalam Java 8, direka bentuk untuk mengendalikan nilai pilihan tanpa menggunakan null secara eksplisit. Pendekatan ini boleh menghalang NullPointerException dengan menyediakan bekas yang sama ada mengandungi nilai bukan nol atau kosong.

Contoh:

Optional<String> name = Optional.ofNullable(getName());
name.ifPresent(n -> System.out.println(n.toUpperCase()));
Salin selepas log masuk
Salin selepas log masuk

Daripada memanggil getName().toUpperCase() secara langsung, yang boleh mengakibatkan NPE jika getName() mengembalikan null, kami menggunakan Optional.ifPresent() untuk melaksanakan tindakan hanya jika nilai ada.

2.2 Gunakan Anotasi untuk Keselamatan Null

Perpustakaan Java seperti Lombok dan rangka kerja seperti anotasi Spring menawarkan seperti @NonNull dan @Nullable untuk menyediakan semakan masa penyusunan dan mencegah NPE.

Contoh:

public void printName(@NonNull String name) {
    System.out.println(name.toUpperCase());
}
Salin selepas log masuk
Salin selepas log masuk

Di sini, jika null dihantar kepada kaedah printName(), amaran atau ralat masa kompilasi akan berlaku, bergantung pada tetapan IDE anda atau konfigurasi binaan.

2.3 Laksanakan Pemeriksaan Null dengan Objects.requireNonNull()

Objects.requireNonNull() ialah kaedah utiliti yang melontarkan NullPointerException dengan mesej tersuai jika objek yang ditentukan adalah nol.

Contoh:

String name = Objects.requireNonNull(getName(), "Name cannot be null");
System.out.println(name.toUpperCase());
Salin selepas log masuk
Salin selepas log masuk

Kod ini membuang NullPointerException tersuai jika getName() mengembalikan null, menghalang tingkah laku yang tidak dijangka kemudian dalam kod.

3. Gunakan Teknik Pengaturcaraan Defensif

Pengaturcaraan defensif melibatkan penulisan kod yang menjangka potensi nilai nol dan mengendalikannya dengan sewajarnya.

3.1 Mulakan Pembolehubah Dengan Segera

Sentiasa mulakan pembolehubah apabila anda mengisytiharkannya. Ini adalah prinsip asas pengaturcaraan pertahanan.

Contoh:

Optional<String> name = Optional.ofNullable(getName());
name.ifPresent(n -> System.out.println(n.toUpperCase()));
Salin selepas log masuk
Salin selepas log masuk

Memulakan nama sebagai senarai kosong dan bukannya null memastikan bahawa sebarang operasi dalam senarai tidak akan menyebabkan NPE.

3.2 Gunakan Operator Ternary dan Cek Bersyarat

Anda boleh menggunakan semakan bersyarat untuk mengendalikan potensi nilai nol tanpa membuang pengecualian secara eksplisit.

Contoh:

public void printName(@NonNull String name) {
    System.out.println(name.toUpperCase());
}
Salin selepas log masuk
Salin selepas log masuk

Kod ini menyemak sama ada nama bukan batal sebelum menukarnya kepada huruf besar, memberikan sandaran yang selamat sebaliknya.

4. Manfaatkan Ciri Java Moden

Dengan setiap keluaran Java, ciri baharu diperkenalkan yang membantu pembangun menulis kod yang lebih selamat, bersih dan lebih mantap.

4.1 Gunakan Map.getOrDefault() dalam Koleksi

Java 8 memperkenalkan Map.getOrDefault() untuk mengendalikan situasi di mana kunci mungkin tidak terdapat dalam peta, mengembalikan nilai lalai dan bukannya null.

Contoh:

String name = Objects.requireNonNull(getName(), "Name cannot be null");
System.out.println(name.toUpperCase());
Salin selepas log masuk
Salin selepas log masuk

Di sini, jika kunci "host" tidak ada, kaedah mengembalikan "localhost" bukannya null.

4.2 Gunakan API Strim dan Penapis untuk Operasi Selamat Null

API Stream Java 8 membenarkan pemprosesan data yang selamat tanpa perlu risau tentang nilai nol.

Contoh:

List<String> names = new ArrayList<>(); // Instead of List<String> names = null;
Salin selepas log masuk

Kod ini menapis nilai nol daripada senarai, memastikan bahawa operasi seterusnya pada FilteredNames adalah selamat nol.

5. Kesimpulan: Amalan dan Ketepatan Mencegah Masalah

Mencegah NullPointerException adalah penting untuk menulis kod Java yang boleh dipercayai. Dengan menggunakan teknik ini—seperti menggunakan Pilihan, pengaturcaraan defensif, ciri Java moden dan semakan nol—anda boleh mengurangkan dengan ketara kejadian NPE dalam aplikasi anda.

Jika anda mempunyai sebarang soalan atau petua tentang mengendalikan NullPointerException dalam Java, sila komen di bawah. Mari berbincang dan belajar bersama!

Baca siaran lebih lanjut di : Petua untuk Mengelakkan NullPointerException dalam Java

Atas ialah kandungan terperinci Petua untuk Mengelakkan NullPointerException dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
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