【发布时间】:2013-07-08 18:05:10
【问题描述】:
运行时:
public class WhatTheShoot {
public static void main(String args[]){
try {
throw null;
} catch (Exception e){
System.out.println(e instanceof NullPointerException);
System.out.println(e instanceof FileNotFoundException);
}
}
}
回复是:
true
false
这对我来说相当惊人。我原以为这会产生编译时错误。
为什么我可以在 Java 中抛出 null,为什么它会将它向上转换为 NullPointerException?
(实际上,我不知道这是否是一个“upcast”,因为我正在抛出 null)
除了一个非常愚蠢的面试问题(请不要在面试中问这个问题)我看不出有任何理由throw null。也许你想被解雇,但那是......我的意思是,为什么还有人会throw null?
有趣的事实 IntelliJ IDEA 12 告诉我,我的行 e instanceof NullPointerException 将永远是错误的。这根本不是真的。
【问题讨论】:
-
一旦知道发生了什么,如果
e是null,那么e instanceof XYZ将是false,不管XYZ是什么。也就是说,你没有抓到null;您捕获了NullPointerException的实际实例。至于“为什么会有人throw null”——人们可能会无意中这样做(如throw this.lastException();,其中lastException()返回null。)关于“有趣的事实”——我猜IntelliJ 不是那么智能。提交错误报告! -
"...我的行
e instanceof NullPointerException将永远是假的。这根本不是真的" - 双关语? -
因为 throw 语句可以抛出引用类型
objects..因为对象可以是 null 它允许你抛出 null 值 -
@Anirudh 不是所有的引用类型,只有
Throwable类型的引用,因为Throwable可以是null引用,所以它允许。
标签: java exception-handling nullpointerexception