我相信java.lang.Exception也是一个经过检查的异常。但java.lang.Exception
与任何其他已检查异常(例如IOException or SQLException.
请参阅以下使用Java版本7编译的代码
try {
//empty try block
} catch (SQLException e) {
e.printStackTrace();
}
这会出现以下编译错误: -
java.lang.Error:未解决的编译问题: SQLException的无法访问的catch块。永远不会从try语句主体
抛出此异常但是如果try块中没有语句,则相同的代码不会产生任何编译错误: -
try {
// empty try block
} catch (Exception e) {
e.printStackTrace();
}
* 结果: - 没有比赛错误*
答案 0 :(得分:2)
通过“检查”异常是否为RuntimeException
的子类型,可以区分未经检查和已检查的异常。
此外,RuntimeException
本身是Exception
的子类型。因此Exception
涵盖所有已检查和所有未经检查的异常。因此,在您的代码示例中,不允许编译器抱怨。
答案 1 :(得分:0)
与普通的Exception相比,SqlException是特定的异常。如果您尝试捕获更具体的异常,编译器将检查代码,尝试查看代码是否可以导致该特定异常。但是在Exception的情况下,它是通用的,并且所有异常都是Exception的子代,因此编译器会忽略它,因为它不是特定于任何特定的代码片段....
我希望这有帮助..