NullPointerException เป็นข้อยกเว้นรันไทม์ที่เกิดจาก JVM เมื่อโค้ดแอปพลิเคชันของเรา, API ที่อ้างอิงอื่นๆ หรือมิดเดิลแวร์พบเงื่อนไขต่อไปนี้
- พยายามเรียกใช้เมธอดอินสแตนซ์ของอ็อบเจกต์ null
- พยายามเข้าถึงหรือแก้ไขฟิลด์เฉพาะของออบเจกต์ null
- พยายามรับความยาวของวัตถุ null เป็นอาร์เรย์
ขั้นตอนในการแก้ไข NullPointerException:
- ตรวจสอบ java.lang.NullPointerException ติดตามสแต็กและกำหนดตำแหน่งที่ทริกเกอร์ข้อยกเว้น (รหัสแอปพลิเคชัน, API บุคคลที่สาม, ซอฟต์แวร์มิดเดิลแวร์ และแยกบรรทัด)
- หากปัญหาอยู่ที่รหัสแอปพลิเคชัน จำเป็นต้องมีการแนะนำโค้ด หากพบปัญหาจาก API ของบุคคลที่สามหรือมิดเดิลแวร์ จำเป็นต้องตรวจสอบโค้ดที่อ้างอิงก่อนและพิจารณาว่าอาจเป็นสาเหตุของปัญหาทางอ้อมหรือไม่ เช่น การส่งผ่านค่า Null ไปยังวิธี API ของบุคคลที่สาม เป็นต้น
- หากพบปัญหาในโค้ดของแอปพลิเคชัน ให้พยายามตรวจสอบว่าอินสแตนซ์ของ Object ใดเป็นค่าว่างและทำให้เกิดปัญหา เราจำเป็นต้องแก้ไขโค้ดเพื่อเพิ่มการตรวจสอบความถูกต้องของค่า null ที่เหมาะสมและการบันทึกที่ถูกต้อง เพื่อให้เราเข้าใจแหล่งที่มาของค่า null ได้เช่นกัน
ตัวอย่าง
public class NPEDemo {
private String field1 = null;
private String field2 = null;
public String getField1() {
return field1;
}
private void setField1(String field1) {
this.field1 = field1;
}
public String getField2() {
return field2;
}
private void setField2(String field2) {
this.field2 = field2;
}
public static void main(String[] args) {
try {
NPEDemo npe = new NPEDemo();
npe.setField1("field1 value");
npe = null;
npe.setField2("field2 Value");
} catch (Throwable e) {
System.out.println("Java Error is: "+e );
e.printStackTrace();
}
}
} ผลลัพธ์
Java Error is: java.lang.NullPointerException java.lang.NullPointerException at NPEDemo.main(NPEDemo.java:24)