Reu*_*ben 32 java null exception-handling
class ThrowNull {
public static void main(String[] args) {
throw null;
}
}
Run Code Online (Sandbox Code Playgroud)
我们知道throw的规则是throw ThrowableInstance;,ThrowableInstance必须是Throwable类型的对象或Throwable的子类.
简单类型(如int或char)以及非Throwable类(如String和Object)不能用作异常.null是一个特殊的Java文字,表示一个空值.
那么为什么要throw null;编译这段代码呢?
Gar*_*het 55
根据语言规范,throw声明定义为:
throw Expression
Run Code Online (Sandbox Code Playgroud)
如果Expression评估为null,则NullPointerException抛出a.特别,
如果表达式的评估正常完成,产生一个
null值,则创建并抛出类的实例V'NullPointerException而不是null.
自NullPointerException扩展以来RuntimeException,它是一个未经检查的例外.这可以解释为什么没有报告此构造的编译时错误.
编译器没有检查很多东西,它假设你做了一些它可能不知道的好理由.它试图阻止的是开发人员常犯的错误.
有人可能认为这是一个很好的简写
throw new NullPointerException();
Run Code Online (Sandbox Code Playgroud)
Integer i = null;
try {
i.intValue();
} catch (NullPointerException npe) {
System.err.println("Caught NPE");
npe.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
和
try {
throw null;
} catch (NullPointerException npe) {
System.err.println("Caught NPE");
npe.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
用Java 6更新38打印
Caught NPE
java.lang.NullPointerException
at Main.main(Main.java:9)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5724 次 |
| 最近记录: |