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:
Mengelakkan NullPointerException lebih kepada amalan pengaturcaraan yang baik daripada perkara lain. Berikut ialah beberapa strategi yang berkesan:
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()));
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.
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()); }
Di sini, jika null dihantar kepada kaedah printName(), amaran atau ralat masa kompilasi akan berlaku, bergantung pada tetapan IDE anda atau konfigurasi binaan.
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());
Kod ini membuang NullPointerException tersuai jika getName() mengembalikan null, menghalang tingkah laku yang tidak dijangka kemudian dalam kod.
Pengaturcaraan defensif melibatkan penulisan kod yang menjangka potensi nilai nol dan mengendalikannya dengan sewajarnya.
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()));
Memulakan nama sebagai senarai kosong dan bukannya null memastikan bahawa sebarang operasi dalam senarai tidak akan menyebabkan NPE.
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()); }
Kod ini menyemak sama ada nama bukan batal sebelum menukarnya kepada huruf besar, memberikan sandaran yang selamat sebaliknya.
Dengan setiap keluaran Java, ciri baharu diperkenalkan yang membantu pembangun menulis kod yang lebih selamat, bersih dan lebih mantap.
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());
Di sini, jika kunci "host" tidak ada, kaedah mengembalikan "localhost" bukannya 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;
Kod ini menapis nilai nol daripada senarai, memastikan bahawa operasi seterusnya pada FilteredNames adalah selamat nol.
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!