public static void main(String[] args) {
File file = new File("foobar");
file.createNewFile();
String baz = "baz";
int myInt = Integer.parseInt(baz);
}
在这段代码中,IDE或编译器会抱怨createNewFile()抛出了一个未处理的异常,我们需要捕获它以允许代码编译。
然而,parseInt()也抛出一个异常,NumberFormatException,但是我们不需要捕获它,虽然它似乎是个好主意。为什么我们不需要捕获该异常?
答案 0 :(得分:5)
规则是不需要捕获扩展RuntimeException
的异常。
NumerFormatException
扩展IllegalArgumentException
,扩展了RuntimeException
。
运行时异常可以发生在程序的任何地方,而在典型的程序中,它们可能非常多。必须在每个方法声明中添加运行时异常会降低程序的清晰度。因此,编译器不要求您捕获或指定运行时异常(尽管可以)。
答案 1 :(得分:3)
最终处理所有。如果你没有捕获它,那么当异常转义main方法时,JVM将捕获它并将其写入stderr。
未选中某些异常,如NullPointerExceptions和NumberFormatExceptions,这意味着程序员不需要捕获它们。您不能要求捕获每个可能的NullPointerException,并将它们添加到方法签名将是没有意义的。
与NullPointerException类似,NumberFormatException是程序员错误的结果,这意味着您对解析方法的输入做出了错误的假设。在某些情况下,不清楚为什么会检查一些例外,而其他例外则不然。
未经检查的例外情况往往无法恢复。它们可能表示某些外部资源已关闭或者它们可能表示程序员错误;事情变得如此错误,没有必要继续进行,最好的办法是取消当前的工作,回到安全点并重新组合。 Here's an explanation of a rationale for how to handle exceptions.