在《 Oracle OCP Java SE 8程序员II学习指南》的第3章中,其内容如下(第184页):
在Java 6中,我们不能编写catch (Exception e)
,而只能抛出特定的异常。如果我们尝试了,编译器仍然会抱怨:
未处理的异常类型Exception
。
这是什么意思?什么是具体示例?
答案 0 :(得分:6)
考虑以下示例:
Integer add (Integer a, Integer b) {
try {
return a + b;
} catch (Exception e) {
throw e;
}
}
当然,两个数字的加法不能引发任何已检查的异常。但是,在Java 6中,编译器看到throw e
,其中e
是Exception
,并得出结论该方法可以抛出任何Exception
。这需要使用add声明为throws Exception
。
从Java 7开始,编译器在重新抛出时可以算出异常类型e
会更聪明。在这种情况下,可以算出e
只能是RuntimeException
(未选中),因此不再需要添加throws Exception
的声明。