在 Java 7 之前的版本中捕获 Java 中的(异常 e)
Catch (Exception e) in Java in versions earlier than Java 7
在 Oracle OCP Java SE 8 Programmer II 学习指南的第 3 章中,它说了以下内容(第 184 页):
在Java6中,我们不能写成catch (Exception e)
而仅仅抛出特定的异常。如果我们尝试,编译器仍然会报错:
未处理的异常类型 Exception
。
这是什么意思?具体例子是什么?
考虑以下示例:
Integer add (Integer a, Integer b) {
try {
return a + b;
} catch (Exception e) {
throw e;
}
}
当然,两个数相加不能抛出任何检查异常。然而,在 Java 6 中,编译器看到 throw e
,其中 e
是一个 Exception
,并得出结论该方法可以抛出任何 Exception
。这需要添加声明它 throws Exception
.
从 Java 7 开始,编译器更聪明地计算出异常 e
在重新抛出时可能是什么类型。在这种情况下,可以计算出 e
只能是 RuntimeException
(未选中),因此不再需要添加 throws Exception
的声明。
在 Oracle OCP Java SE 8 Programmer II 学习指南的第 3 章中,它说了以下内容(第 184 页):
在Java6中,我们不能写成catch (Exception e)
而仅仅抛出特定的异常。如果我们尝试,编译器仍然会报错:
未处理的异常类型 Exception
。
这是什么意思?具体例子是什么?
考虑以下示例:
Integer add (Integer a, Integer b) {
try {
return a + b;
} catch (Exception e) {
throw e;
}
}
当然,两个数相加不能抛出任何检查异常。然而,在 Java 6 中,编译器看到 throw e
,其中 e
是一个 Exception
,并得出结论该方法可以抛出任何 Exception
。这需要添加声明它 throws Exception
.
从 Java 7 开始,编译器更聪明地计算出异常 e
在重新抛出时可能是什么类型。在这种情况下,可以计算出 e
只能是 RuntimeException
(未选中),因此不再需要添加 throws Exception
的声明。