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)