Java 任何已检查异常(异常除外)与异常的行为差异

Java 任何已检查异常(异常除外)与异常的行为差异,java,exception-handling,Java,Exception Handling,我相信java.lang.Exception也是一个检查异常。但是java.lang.Exception与任何其他检查异常(如IOException或SQLException)在行为上有区别。 请参阅以下使用Java版本7编译的代码 try { //empty try block } catch (SQLException e) { e.printStackTrace(); } 这会产生以下关联错误:- java.lang.Error:未解决的

我相信java.lang.Exception也是一个检查异常。但是
java.lang.Exception
与任何其他检查异常(如
IOException或SQLException)在行为上有区别。

请参阅以下使用Java版本7编译的代码

 try {
    //empty try block   
    } catch (SQLException e) {

        e.printStackTrace();
    }
这会产生以下关联错误:-

java.lang.Error:未解决的编译问题: SQLException的不可访问捕获块。决不会从try语句体引发此异常

但如果try块中没有语句,则同一代码不会给出任何编译错误:-

       try {
        // empty try block
    } catch (Exception e) {

        e.printStackTrace();
    }

*结果:-无编译错误*

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


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

SqlException是特定的异常,而不是泛型异常。当您试图捕获更具体的异常时,编译器将检查中的代码,以查看代码是否会导致该特定异常。但在异常的情况下,它是泛型的,所有异常都是异常的子级,因此编译器会忽略它,因为它不是特定于任何特定代码段的

我希望这有帮助。

请检查一下