为什么我可以在Java中抛出空指针异常(Null),以及为什么它会向上转型为NullPointerException?


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

Object obj = null;

但是,如果您这样做,则不能使用具有空值的对象(或使用空值代替对象),否则将抛出NullPointerException。

示例

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)

抛出NullPointerException

您也可以使用throw关键字在Java中抛出NullPointerException。

示例

public class ExceptionExample {
   public static void main(String[] args) {
      System.out.println("Hello");
      NullPointerException nullPointer = new NullPointerException();
      throw nullPointer;
   }
}

输出

Hello
Exception in thread "main" java.lang.NullPointerException
   at MyPackage.ExceptionExample.main(ExceptionExample.java:6

抛出空值

根据Java文档,如果您尝试以下操作,则会发生NullPointerException:

  • 使用空对象调用方法(实例方法)。
  • 访问、修改或打印空值(对象)的字段。
  • 尝试访问(打印/在语句中使用)空值的长度。
  • 抛出空值。
  • 访问或修改空值的元素/槽。

这意味着如果您抛出空值,则会发生空指针异常,它不是向上转型。

示例

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)

更新于:2020年7月2日

1K+浏览量

开启您的职业生涯

完成课程获得认证

开始学习
广告