Computer >> Máy Tính >  >> Lập trình >> Java

Làm thế nào để giải quyết một NullPointerException trong Java?

A NullPointerException là một ngoại lệ thời gian chạy do JVM ném ra khi mã ứng dụng của chúng tôi, API được tham chiếu khác hoặc phần mềm trung gian gặp các điều kiện sau

  • Đang cố gọi một phương thức thể hiện của một đối tượng null.
  • Cố gắng truy cập hoặc sửa đổi một trường cụ thể của đối tượng rỗng.
  • Đang cố gắng lấy độ dài của một đối tượng null dưới dạng một mảng.

Các bước giải quyết NullPointerException:

  • Xem lại java.lang.NullPointerException theo dõi ngăn xếp và xác định vị trí kích hoạt Ngoại lệ (Mã ứng dụng, API của bên thứ ba, phần mềm trung gian và trích xuất dòng).
  • Nếu sự cố xảy ra ở mã ứng dụng thì bạn sẽ phải xem qua mã. Nếu vấn đề được phát hiện từ API của bên thứ ba hoặc phần mềm trung gian, trước tiên cần xem lại mã được tham chiếu và xác định xem nó có thể gián tiếp là nguồn gốc của vấn đề hay không, chẳng hạn như chuyển giá trị null sang phương thức API của bên thứ ba, v.v.
  • Nếu vấn đề được tìm thấy trong mã ứng dụng, hãy cố gắng xác định phiên bản Đối tượng nào là rỗng và gây ra sự cố. Chúng tôi cần sửa đổi mã để thêm xác thực kiểm tra null thích hợp và ghi nhật ký thích hợp để chúng tôi cũng có thể hiểu nguồn của giá trị null.

Ví dụ

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();
      }
   }
}

Đầu ra

Java Error is: java.lang.NullPointerException
java.lang.NullPointerException
at NPEDemo.main(NPEDemo.java:24)