运行此操作时:
公共类播放什么{
公共静态void main(字符串参数[]){
试一试{
抛出空值;
}捕获(例外e){
System.out.println(NullPointerException的e实例);
System.out.println(FileNotFoundException的e实例);
}
}
}
答复是:
true
错误的
这对我来说是相当惊人的。我本以为这会导致编译时错误
为什么我可以在Java中抛出null,为什么它会将其向上转换为NullPointerException?
(事实上,我不知道这是否是一个“向上投射”,因为我抛出空值)
除了一个非常愚蠢的面试问题(请不要在面试中问这个问题)之外,我看不出有任何理由抛出null。也许你想被解雇,但那是。。。我的意思是,为什么会有人抛出null
有趣的事实IntelliJ IDEA12告诉我,我的行,e instanceof NullPointerException,将始终为false。这根本不是真的
看起来并不是null被视为NullPointerException,而是试图抛出null本身抛出一个NullPointerException
换句话说,throw检查其参数是否为非null,如果为null,则抛出NullPointerException
JLS 14.18指定此行为:
如果表达式的求值正常完成,生成一个null值,那么将创建并抛出类NullPointerException的实例V’,而不是null。然后,throw语句突然完成,原因是值为V’的抛出