首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么使用finally

为什么使用finally
EN

Stack Overflow用户
提问于 2010-07-29 00:00:09
回答 9查看 27.5K关注 0票数 45

我从来没有正确地理解finally语句的用法。谁能告诉我这两者的区别是什么:

代码语言:javascript
复制
try {
    a;
    block;
    off;
    statements;
} catch (Exception e) {
    handle;
    exception;
    e;
} finally {
    do;
    some;
    cleanup;
}

一方面,还有:

代码语言:javascript
复制
try {
    a;
    block;
    off;
    statements;
} catch (Exception e) {
    handle;
    exception;
    e;
}
do;
some;
cleanup;

在另一端

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-08-01 05:46:04

它们在以下情况下有所不同

try--block通过抛出一个不是java.lang.Throwablejava.lang.Exception来完成,例如,因为它是一个java.lang.Error,例如AssertionErrorOutOfMemoryError.

  • the。使用控制流语句(例如,continuebreakreturn

  • the -block)突然完成continuebreakreturn

  • the-
  • (通过抛出任何可抛出的语句,或使用控制流语句)<代码>H215<代码>F216

更普遍的是,java语言保证在try语句完成之前执行finally块。(请注意,如果try-语句没有完成,则不能保证最终。语句可能由于各种原因而无法完成,包括硬件关闭、OS关闭、VM关闭(例如,由于System.exit)、线程正在等待(Thread.suspend()synchronizedObject.wait()Thread.sleep())或正处于忙碌状态(无限循环、)。

因此,finally块比方法体的末尾更适合清理操作,但就其本身而言,仍然不能保证清理的执行。

票数 39
EN

Stack Overflow用户

发布于 2010-07-29 00:02:20

finally块始终执行。

finally块用于清理,比如释放try/catch中使用的资源,关闭数据库连接,关闭套接字等。即使在try/catch块中发生了未处理的异常。

finally块唯一不执行的时候是在try/catch中调用system.exit()时,或者发生了一些错误而不是异常。

上述描述中的错误是指Java应用程序退出时出现诸如内存不足错误等情况。我看到了一些负面影响:(由于这个原因,它似乎。

票数 31
EN

Stack Overflow用户

发布于 2010-07-29 00:02:22

主要区别在于,catch部分本身可能抛出异常,打破周围的块,或者从当前方法返回。在这种情况下,不会执行do; some; cleanup;

使用finally块,可以保证该代码将被执行。

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3354823

复制
相关文章

相似问题

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