Java 7之前版本中的Catch(Exception e)

3 java exception-handling

在Oracle OCP Java SE 8程序员II学习指南的第3章中,它说如下(第184页):

在Java 6中,我们不能编写catch (Exception e)而只是抛出特定的异常.如果我们尝试过,编译器仍会抱怨:

未处理的异常类型Exception.

这是什么意思?什么是具体的例子?

Joe*_*e C 6

请考虑以下示例:

Integer add (Integer a, Integer b) {
    try {
        return a + b;
    } catch (Exception e) {
        throw e;
    }
}
Run Code Online (Sandbox Code Playgroud)

当然,添加两个数字不能抛出任何已检查的异常.然而,在Java 6中,编译器看到throw e,这里e是一个Exception,并得出结论,该方法可以抛出任何Exception.这需要添加声明它throws Exception.

从Java 7开始,编译器e在重新抛出异常时可以解决什么类型的异常.在这种情况下,它能够计算出e只能是RuntimeException(未经检查),因此throws Exception不再需要添加的声明.