首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在catch之后使用finally而不是code

为什么在catch之后使用finally而不是code
EN

Stack Overflow用户
提问于 2011-01-14 22:17:29
回答 14查看 55.3K关注 0票数 87

为什么要这样做?

代码语言:javascript
复制
} catch (SQLException sqle) {
    sqle.printStackTrace();
} finally {
    cs.close();
    rs.close();
}

而不是这个

代码语言:javascript
复制
} catch (SQLException sqle) {
    sqle.printStackTrace();
}
rs.close();
cs.close();
EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2011-01-14 22:19:44

因为如果异常被抛出,则在try 之后不会执行任何代码,除非捕获该异常。无论try块中发生了什么,finally块都会被执行。

票数 95
EN

Stack Overflow用户

发布于 2011-01-14 22:19:45

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

此外,可能还有其他未捕获的异常--要么是因为您已声明该方法会抛出这些异常,要么是因为它们是未检查的异常。您真的想因为IllegalArgumentException被抛出到某个地方而泄漏资源吗?

票数 25
EN

Stack Overflow用户

发布于 2011-01-14 22:20:54

因为如果抛出异常,

当异常向外传播时,finally子句中的

  • 代码将执行,即使异常中止了try/catch块之后的其余方法execution;
  • Code也不会执行,除非异常被catch块捕获且不会重新引发。
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4691962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档