当前位置:  开发笔记 > 程序员 > 正文

finally块有什么意义?

如何解决《finally块有什么意义?》经验,为你挑选了5个好方法。

除了语法之外,有什么区别

try {
}
catch() {
}
finally {
    x = 3;
}

try {
}
catch() {
}

x = 3;

编辑:在.NET 2.0中?


所以

try {
    throw something maybe
    x = 3
}
catch (...) {
    x = 3
}

在行为上是等同的吗?



1> Josh Hinman..:

好吧,首先,如果您在try块中返回,则finally仍将运行,但try-catch-finally块下面列出的代码不会.



2> Vinko Vrsalo..:

取决于语言,因为可能存在一些轻微的语义差异,但想法是它将(几乎)始终执行,即使try块中的代码引发异常.

在第二个示例中,如果catch块中的代码返回或退出,则不会执行x = 3.在第一个它会.

在.NET平台中,在某些情况下不会发生finally块的执行:安全异常,线程暂停,计算机关闭:)等.


我会添加阻止执行finally块*Environment.Exit*调用的方法列表.

3> SCdF..:

在Java中:

最后总是被调用,无论异常是否在catch()中被正确捕获,或者实际上如果你有一个catch.



4> Bartosz Bier..:

最后尝试抓住是非常重要的构造.您可以确定即使抛出异常,也会执行finally块中的代码.处理外部资源以释放它们非常重要.垃圾收集不会为您做到这一点.在最后一部分,你不应该有return语句或抛出异常.这样做是可能的,但这是一种不好的做法,可能导致不可预测的结果.

如果您尝试此示例:

try {
  return 0;
} finally {
  return 2;
}

结果将是2 :)

与其他语言的比较:从最后回归



5> wvdschel..:

有几件事使得finally块有用:

    如果从try或catch块返回,则在将控制权返回给调用函数之前,finally块仍然执行

    如果catch块中发生异常,或者try块中发生未捕获类型的异常,则仍会执行finally块中的代码.

这些使得finally块非常适合关闭文件句柄或套接字.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有