[英]Java: catching specific Exceptions
说我有以下几点
try{
//something
}catch(Exception generic){
//catch all
}catch(SpecificException se){
//catch specific exception only
}
当遇到 SpecificException 时会发生什么? 它是否首先将其作为通用异常捕获,然后再捕获特定异常?
或者它是否只捕获特定异常而忽略一般异常。
我不希望通用和特定异常都被捕获。
这不会编译。 您会被告知无法访问特定的异常块。
您必须首先拥有更具体的异常 catch 块,然后才是通用的。
try
{
//something
}
catch(SpecificException se)
{
//catch specific exception only
}
catch(Exception generic)
{
//catch all
}
不。所有异常都会被第一个块捕获。 第二个永远不会到达(编译器识别出,由于无法访问的代码导致错误)。 如果你想专门处理SpecificException
,你必须反过来做:
}catch(SpecificException se){
//catch specific exception only
}catch(Exception generic){
//catch all
}
然后, SpecificException
将被第一个块捕获,而所有其他SpecificException
将被第二个块捕获。
这不能用 eclipse 编译器编译:
IOException 的无法访问的 catch 块。 它已经由异常的 catch 块处理
所以用另一种方式定义它们。 只有特定的会被捕获。
依次尝试 catch 块,并执行第一个匹配异常类型的块。 由于Exception
是所有异常类型的超类,所以会一直在这个实例中执行,特定情况下永远不会执行。 事实上,编译器足够聪明,可以注意到这一点并引发编译错误。
只需重新排序 catch 子句。
作为旁注,调用两个 catch 块的唯一方法是使用嵌套异常。
try {
try{
//something
}catch(SpecificException se){
//catch specific exception only
throw se;
}
}catch(Exception generic){
//catch all
}
我的提议 - 捕获 SQLException 并检查代码。
try {
getConnectionSYS(dbConfigFile, properties);
} catch (SQLException e){
if (e.getErrorCode()==1017){
getConnectionUSER(dbConfigFile, properties);
} else {
throw e;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.