为什么某些Java异常可能未处理?

时间:2014-10-21 14:56:53

标签: java exception exception-handling

    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,但是我们不需要捕获它,虽然它似乎是个好主意。为什么我们不需要捕获该异常?

2 个答案:

答案 0 :(得分:5)

规则是不需要捕获扩展RuntimeException的异常。

NumerFormatException扩展IllegalArgumentException,扩展了RuntimeException

来自Oracle documentation

  

运行时异常可以发生在程序的任何地方,而在典型的程序中,它们可能非常多。必须在每个方法声明中添加运行时异常会降低程序的清晰度。因此,编译器不要求您捕获或指定运行时异常(尽管可以)。

答案 1 :(得分:3)

最终处理所有。如果你没有捕获它,那么当异常转义main方法时,JVM将捕获它并将其写入stderr。

未选中某些异常,如NullPointerExceptions和NumberFormatExceptions,这意味着程序员不需要捕获它们。您不能要求捕获每个可能的NullPointerException,并将它们添加到方法签名将是没有意义的。

与NullPointerException类似,NumberFormatException是程序员错误的结果,这意味着您对解析方法的输入做出了错误的假设。在某些情况下,不清楚为什么会检查一些例外,而其他例外则不然。

未经检查的例外情况往往无法恢复。它们可能表示某些外部资源已关闭或者它们可能表示程序员错误;事情变得如此错误,没有必要继续进行,最好的办法是取消当前的工作,回到安全点并重新组合。 Here's an explanation of a rationale for how to handle exceptions.