java - 是什么导致finally block 执行得太快?

标签 java exception try-catch-finally

我有一个 try-catch-finally block ,如下所示:

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 个元素。问题是,用于关闭所有内容的finally block 是在第一次出现for 循环后执行的,这会导致下一次出现抛出异常,因为连接现已关闭。

我从未遇到过finally block 在try block 完成之前执行的情况。什么可能导致这种情况?

最佳答案

基本上,发生的事情是终于按预期工作。简短的解释是,无论 try block 如何终止,都会执行 finally block 。

在您的示例中,根据您所说的,最可能的情况如下:

  • 循环体抛出一些异常,
  • 异常被捕获并重新抛出,并且
  • 然后执行 finally block 。

finally block 在 try block “终止”之前不会执行,因此您认为 finally block 是导致循环体失败是不正确的。

引用:http://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html

关于java - 是什么导致finally block 执行得太快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18212560/

相关文章:

c# - 我应该如何在 Java 中复制 C#'s ' using' 语句的功能?

java - 在 Java 中使用 finally block 捕获异常及其消息

java - 为什么 return 不遵守finally block 中变量的值?

java - 窗口底部的 JButton

java - 如何在 PubNub GWT api 中设置 UUID?

java - 如何运行所有测试用例,甚至之前的测试用例都是错误的

c++ - 在 C++ 中什么可以(什么不能)抛出异常?

c# - protobuf-net 子消息未正确读取

java - 继续提示直到满足标准

java - Java 中的数字到单词的转换