【问题标题】:Behaviour difference in any checked Exception (except Exception )vs Exception任何已检查异常(异常除外)与异常中的行为差异
【发布时间】:2013-11-29 12:53:36
【问题描述】:

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

*结果:- 没有编译错误*

【问题讨论】:

标签: java exception-handling


【解决方案1】:

通过“检查”异常是否是RuntimeException 的子类型来区分未检查和检查的异常。

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

【讨论】:

    【解决方案2】:

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

    我希望这会有所帮助..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多