为什么在捕获后使用最终而不是代码

2022-08-31 10:51:53

为什么要这样做

} catch (SQLException sqle) {
    sqle.printStackTrace();
} finally {
    cs.close();
    rs.close();
}

而不是这个

} catch (SQLException sqle) {
    sqle.printStackTrace();
}
rs.close();
cs.close();

答案 1

因为如果抛出异常,则在执行 try 块后不会引发任何代码除非捕获该异常。无论块内发生什么,块总是被执行的。finallytry


答案 2

看看你的接球块 - 它会扔.因此,即使在您给出的示例中,也不会执行 catch 块后面的语句。你所展示的(将一个异常包装在另一个异常中)是一种常见的模式 - 但另一种可能性是,catch 块“意外地”引发异常,例如,因为它所做的一个调用失败。DAOException

此外,可能还有其他异常捕获 - 因为您已声明该方法会引发这些异常,或者因为它们是未经检查的异常。你真的想泄漏资源,因为一个被扔在某个地方吗?IllegalArgumentException


推荐