Bla*_*man 16 .net exception-handling
在try/catch/finally块中,例如:
try
{
}
catch()
{
// code fails here
}
finally
{
}
Run Code Online (Sandbox Code Playgroud)
所以如果catch块中有异常,最终会被调用吗?
如果没有最终的话,catch块之后的代码会运行吗?
Jon*_*eet 25
假设进程没有突然终止(或挂起,当然),finally块将始终执行.
如果没有finally块,catch块中的异常将被抛出堆栈.请注意,导致catch块首先执行的原始异常将被有效丢失.
堆栈溢出异常
正如Jared所指出的,堆栈溢出将导致finally块不被执行.我相信这会突然终止程序,但我可能错了.这是示例代码:
using System;
public class Test
{
static void Main()
{
// Give the stack something to munch on
int x = 10;
try
{
Main();
Console.WriteLine(x);
}
finally
{
Console.WriteLine("Finally");
}
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
由于StackOverflowException,进程终止.
finally块将始终执行.如果排除finally块,并且catch块内发生异常,那么catch块之后的代码就不会执行,因为基本上你的catch块会失败并自己生成一个未处理的异常.