【发布时间】:2011-07-06 05:27:26
【问题描述】:
class ThrowNull {
public static void main(String[] args) {
throw null;
}
}
我们知道 throw 的规则是 throw ThrowableInstance;,其中 ThrowableInstance 必须是 Throwable 类型的对象或 Throwable 的子类。
简单类型,例如 int 或 char,以及 non-Throwable 类,例如 String 和 Object,不能用作异常。 null 是一个特殊的 Java 字面量,它表示一个空值。
那么为什么throw null; 会在这段代码中编译呢?
【问题讨论】:
-
为什么会导致编译时错误?
-
虽然目前 Java 编译器本身并未将其标记为问题(除非语言规范在未来某个时间发生变化),但它显然是静态检查器(如“Sonar”)的候选者根除并指出给开发者。也许开发者想写“return null”...
-
我们知道规则是调用
String a() {return null}的结果必须是(子)类或String的对象。简单的类,如 Throwable 或 BigInteger 不能用作字符串。 Null 是一种特殊的 Java 文字,它表示一个空值。那为什么return null没有产生任何编译时错误??????!!!我在这里暴露你的双重标准。为什么你抱怨throw null而不是抱怨return null?因此,我不能赞成你的问题。采用双重标准的方式过于本土化。
标签: java exception-handling null