任何已检查的异常(Exception除外)与Exception之间的行为差​​异

时间:2013-11-29 12:53:37

标签: java exception-handling

我相信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();
    }

* 结果: - 没有比赛错误*

2 个答案:

答案 0 :(得分:2)

通过“检查”异常是否为RuntimeException的子类型,可以区分未经检查和已检查的异常。

此外,RuntimeException本身是Exception的子类型。因此Exception涵盖所有已检查和所有未经检查的异常。因此,在您的代码示例中,不允许编译器抱怨。

答案 1 :(得分:0)

与普通的Exception相比,SqlException是特定的异常。如果您尝试捕获更具体的异常,编译器将检查代码,尝试查看代码是否可以导致该特定异常。但是在Exception的情况下,它是通用的,并且所有异常都是Exception的子代,因此编译器会忽略它,因为它不是特定于任何特定的代码片段....

我希望这有帮助..