gpt4 book ai didi

language-agnostic - 为什么要用finally?

转载 作者:行者123 更新时间:2023-12-01 12:42:01 24 4
gpt4 key购买 nike

我能找到的关于 try-catch-finally 构造的 finally 部分的所有文档都是相同的: finally block 中的代码无论是否发生异常都会运行,对于放置清理代码很有用。

我的问题是……为什么?

我的意思是,这是怎么回事:

try {
doSomething();
}
catch( e) {
somethingFailed(e);
}
finally {
cleanupSomething();
}

比这更好的是:

try {
doSomething();
}
catch( e) {
somethingFailed(e);
}
cleanupSomething();

换句话说,finally 与继续进行有何不同?

最佳答案

Finally 实际上非常有用。它绝对是一个值得拥有的工具,因为它本质上可以保护必须管理的资源,而无需等待垃圾收集器。还有其他用途,但这是它的主要用途。

我们为什么要使用它?为什么不将处置放在 catch 语句之后(假设所有异常都被捕获)?

这有一个很好的理由,那就是当控制离开 try 语句时。如果发生这种情况,无论出于何种原因,finally 都会在控制离开之前受到打击。因此,例如,如果没有捕获到返回、继续、中断、转到或异常——如果任何发生在 try block 中的事情最终都会执行,而你的帖子中的代码不会因为控制已经离开。如果那是一个重要的资源,它只是被泄露了。

关于language-agnostic - 为什么要用finally?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23498383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com