【发布时间】:2021-07-25 00:31:17
【问题描述】:
在 Cay Horstmann 的 Java 9 书中,它说
Integer.parseInt(String str);
“它会抛出未经检查的 NumberFormatException”。
NumberFormatException 继承自 RuntimeException。 当我查看 Java 11 文档时,它是在签名中声明的。 所以调用方法必须在某个时候处理它。
public static int parseInt(String s) throws NumberFormatException
现在不是已检查异常 - 因为编译器可以检查其使用情况吗?
更新:编译器是否检查NumberFormatException 是否由调用者处理?我看不出编译器从不需要调用方法(甚至那些远离调用方法的方法)来捕获检查的异常有什么好处。
【问题讨论】:
-
没有。
throws子句完全是为了方便程序员阅读文档。 -
这是一个 declared 异常 - 不会使其成为 checked 异常。编译器不会检查
NumberFormatException仅从该方法或其他声明它的方法中抛出。 -
@kaya3 "编译器不会检查 NumberFormatException 是否仅从此方法或其他声明它的方法中抛出。"嗯?我不明白。为了编译代码,编译器必须检查是否抛出了异常。
-
不,完全允许声明一个实际上没有抛出的异常,例如
void foo() throws Exception { /* do nothing */ }。 “检查的异常”并不意味着编译器检查每个方法可以抛出它声明的异常,它意味着编译器检查该类型的异常只能被抛出通过声明它的方法。 -
@kaya3 编译器是否检查 NumberFormatException 是否由调用者处理?
标签: java