我有一个try-catch-finally块,看起来像这样:
ResultSet rs;
PreparedStatement ps;
Connection conn;
try {
for (int i = 0; i < list.size(); i++) {
** execute SQL query **
}
} catch (Exception e) {
throw e;
} finally {
** close result set **
** close prepared statement **
** close connection **
}
我已经验证我的ArrayList列表中有534个元素。问题在于,在我的for循环的第一个匹配项之后,将关闭所有内容的finally块正在执行,这会导致下一个匹配项抛出异常,因为该连接现在已关闭。
我从未遇到过在try块完成之前执行finally块的情况。是什么导致这种情况?
最佳答案
基本上,正在发生的事情是finally
正常工作。简短的解释是,无论finally
块如何终止,都将执行try
块。
在您的示例中,根据您的发言,最可能的情况如下:
循环体会引发一些异常,
异常被捕获并重新抛出,并且
然后执行finally
块。
在finally
块“终止”之前,不会执行try
块,因此您认为finally
块导致循环主体失败的理论是不正确的。
参考:http://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html