2

据我所知,如果方法抛出异常 Java 编译器会强制该方法的调用者捕获该异常。

我看到parseInt抛出NumberFormatException

public static int parseInt(String s) throws NumberFormatException {
    return parseInt(s,10);

那么为什么我可以在不捕获异常的情况下调用它:

String str = "5";
int n = Integer.parseInt(str);
4

2 回答 2

8

因为NumberFormatException扩展RuntimeException- 运行时异常被认为是“未检查的”,请参阅JavadocRuntimeException

RuntimeException 是可以在 Java 虚拟机正常运行期间抛出的那些异常的超类。

方法不需要在其 throws 子句中声明任何可能在方法执行期间抛出但未被捕获的 RuntimeException 子类。

这是Java 教程中的一篇文章,解释了此功能的含义以及它存在的原因

于 2011-05-26T04:57:29.097 回答
0

重要的区别是任何从运行时异常扩展的异常都不需要被捕获,而任何其他异常都需要。任何时候都可能抛出扩展 RuntimeException 的异常,比如 NullPointerException 或 ConcurrentModificationException,所以它们不能指望你去尝试捕获它们。

于 2011-05-26T05:04:58.263 回答