Java 任何已检查异常(异常除外)与异常的行为差异
我相信java.lang.Exception也是一个检查异常。但是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
与任何其他检查异常(如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是特定的异常,而不是泛型异常。当您试图捕获更具体的异常时,编译器将检查中的代码,以查看代码是否会导致该特定异常。但在异常的情况下,它是泛型的,所有异常都是异常的子级,因此编译器会忽略它,因为它不是特定于任何特定代码段的
我希望这有帮助。请检查一下