由于以下原因,捕获异常时的顺序很重要:
记住:
catch(ExceptionType e){
}
小写字符 e 是对抛出(和捕获)ExceptionType
对象的引用。
您的代码不被接受的原因是什么?
重要的是要记住异常子类必须出现在它们的任何超类之前。这是因为使用超类的 catch 语句将捕获该类型及其任何子类的异常。因此,如果子类出现在其超类之后,则永远无法到达子类。
此外,在 Java 中,无法访问的代码是一个错误。
SQLException
是超类的SQLDataException
+----+----+----+
| SQLException | `e` can reference SQLException as well as SQLDataException
+----+----+----+
^
|
|
+----+----+----+---+
| SQLDataException | More specific
+----+----+----+---+
如果你的写作喜欢有错误 Unreachable code
(阅读评论):
try{
}
catch(java.sql.SQLException e){//also catch exception of SQLDataException type
}
catch(java.sql.SQLDataException e){//hence this remains Unreachable code
}
如果您尝试编译此程序,您将收到一条错误消息,指出第一个 catch 语句将处理所有基于 SQLException 的错误,包括 SQLDataException。这意味着第二个 catch 语句将永远不会执行。
正确的解决方案?
要修复它,请颠倒 catch 语句的顺序。如下:
try{
}
catch(java.sql.SQLDataException e){
}catch(java.sql.SQLException e){
}