为什么我可以在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)
广告