English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

如果在Java的主要方法中未处理NullPointerException,会发生什么情况?

在Java中,每种类型都有默认值,当您不初始化类的实例变量时,Java编译器将使用这些值代您初始化它们。Null是对象类型的默认值,您也可以手动将null分配给方法中的对象。

Object obj = null;

但是,您不能使用具有null值的对象或(如果使用null值而不是对象)对象,则将引发NullPointerException

以下是发生NullPointerException的一些情况。

  • 使用空对象调用a方法(实例)。

public class Demo {
   public void demoMethod() {
      System.out.println("Hello how are you");
   }
   public static void main(String args[]) {
      Demo obj = null;
      obj.demoMethod();
   }
}

运行时异常

Exception in thread "main" java.lang.NullPointerException
at july_set3.Demo.main(Demo.java:11)
  • 访问,修改,打印空值(对象)的字段。

public class Demo {
   String name = "Krishna";
   int age = 25;
   public static void main(String args[]) {
      Demo obj = null;
      System.out.println(obj.age);
      System.out.println(obj.name);
   }
}

运行时异常

Exception in thread "main" java.lang.NullPointerException
at july_set3.Demo.main(Demo.java:11)
  • 尝试访问(打印/在语句中使用)空值的长度。

public class Demo {
   String name = null;
   public static void main(String args[]) {
      Demo obj = new Demo();
      System.out.println(obj.name.length());
   }
}

运行时异常

Exception in thread "main" java.lang.NullPointerException
at july_set3.Demo.main(Demo.java:7)
  • 抛出一个空值。

public class Demo {
   public static void main(String args[]) {
      throw null;
   }
}

运行时异常

Exception in thread "main" java.lang.NullPointerException
at july_set3.Demo.main(Demo.java:5)
  • 访问或修改具有空值的元素/插槽。

public class Demo {
   public static void main(String args[]) {
      int myArray[] = null;
      System.out.println(myArray[5]);
   }
}

运行时异常

Exception in thread "main" java.lang.NullPointerException
   at july_set3.Demo.main(Demo.java:6)

避免NullPointerException

避免NullPointerException

  • 使用它们之前,请确保所有对象均已初始化。

  • 在访问其上的字段和方法(如果有)之前,请确保每个引用变量(对象,数组等)均不为null。

处理NullPointerException

是的,您可以在main方法中处理NullPointerException并显示您自己的消息。而且,如果尚未处理,程序将在运行时异常抛出NPE终止。

示例

public class Demo {
   public static void main(String args[]) {
      int myArray[] = null;
      try {
         System.out.println(myArray[5]);
      }catch(NullPointerException e){
         System.out.println("NPE occurred");
      }
   }
}

输出结果

NPE occurred

但是,由于NullPointerException是运行时/未经检查的异常,因此无需在运行时进行处理。

此外,只要程序中有应修复的错误,就会发生NPE,建议您修复或避免该错误,而不是尝试捕获异常。