这是我编写的示例代码,用于理解输出以及finally块的执行方式:
public static void finallyBlockExecution(int num)
{
try
{
if (num != 14)
{
Console.WriteLine("num is {0}", num);
exceptionMethod(++num);
}
}
finally
{
Console.WriteLine("Finally executed.. {0}", num);
}
}
当我调用这样的方法时:ClassA.finallyBlockExecution(10);
输出是:
num is 10
num is 11
num is 12
num is 13
finally executed.. 14
finally executed.. 14
finally executed.. 13
finally executed.. 12
finally executed.. 11
我知道finally
将被执行5次,但我无法弄清楚为什么它会打印14次。
答案 0 :(得分:0)
当程序流程到达try块并且如果定义了finally块时,则总是在任何情况下都会执行块。如果不执行finally块,方法不能返回。这就是'最终执行... 14'被打印两次的原因。想象一下,我们有以下代码块。
public int DoSomeCalculation()
{
int a=0;
try
{
//perform some calculations
return a;
}
catch(Exception ex)
{
return -1;
}
finally
{
Console.WriteLine("Do some cleanup");
}
}
这里最终将执行块,无论方法是从try还是catch块返回。