为什么要这样做?
} catch (SQLException sqle) {
sqle.printStackTrace();
} finally {
cs.close();
rs.close();
}而不是这个
} catch (SQLException sqle) {
sqle.printStackTrace();
}
rs.close();
cs.close();发布于 2011-01-14 22:19:44
因为如果异常被抛出,则在try 块之后不会执行任何代码,除非捕获该异常。无论try块中发生了什么,finally块都会被执行。
发布于 2011-01-14 22:19:45
看看你的catch块--它会抛出DAOException。因此,即使在您给出的示例中,catch块之后的语句也不会被执行。您所展示的(将一个异常包装在另一个中)是一种常见的模式--但另一种可能是catch块“意外”抛出了一个异常,例如,因为它发出的一个调用失败了。
此外,可能还有其他未捕获的异常--要么是因为您已声明该方法会抛出这些异常,要么是因为它们是未检查的异常。您真的想因为IllegalArgumentException被抛出到某个地方而泄漏资源吗?
发布于 2011-01-14 22:20:54
因为如果抛出异常,
当异常向外传播时,finally子句中的
https://stackoverflow.com/questions/4691962
复制相似问题