Sco*_*t W 17 c# exception-handling
在Try Catch Finally块中,finally块总是执行,无论是什么,或者只有catch块没有返回错误?
我的印象是,如果catch块没有错误,则finally块只会执行.如果由于错误而执行了catch块,那么它是否应该一起停止执行并返回错误消息(如果有的话)?
Mar*_*ers 31
无论是否存在异常,finally块(几乎)总是执行.
我说几乎是因为有一些案例最终无法保证被调用:
此外,即使最后一个块被输入,如果ThreadAbortException在线程进入finally块时发生,则不会运行finally块中的代码.
可能还有其他一些案例......
Mic*_*urn 12
finally块不仅会在catch块之后执行,而且甚至不需要捕获任何异常以便finally执行.以下是完全合法的代码:
try
{
//do stuff
}
finally
{
//clean up
}
Run Code Online (Sandbox Code Playgroud)
我实际上在catch块包含的一些代码中取出了catch块:
catch(Exception ex)
{
throw ex;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,所需要的只是清理,所以我只用try {}和最后{}阻止它,让异常冒出来,它们的堆栈跟踪完好无损.
几乎在每种情况下都会执行finally块.这就是为什么它被称为'终于'.
有关示例,请参阅c-sharpcorner.com上的这篇文章.
更新:这是真的,如果你插上电缆,熔化处理器或研磨主板,即使是最终的'最终'也不会被执行.
但是在几乎每个"正常"场景中,即你的代码是否抛出异常,finally块将被执行.据我所知,这条规则唯一的"真正的"例外是stackoverflow异常,它会终止程序,而不会最终进入.
更新2:此问题专门针对C#提出.这个答案不包括Java,Python,Matlab或Scheme.
| 归档时间: |
|
| 查看次数: |
10375 次 |
| 最近记录: |