尝试赶上最后执行流程

如果一个异常在的try-catch的catch块抛出,然后将finally块来叫什么名字?

try { //some thing which throws error } catch { //again some thing throws error } finally { //final clean up }

在这里,将最终叫什么名字?

谢谢,As​​hwani

--------------解决方案-------------

至少在Java和C#中, finally块总是执行,无论多么try块退出。

如果答案是假的, finally构建将提供比简单地包括在try块的末尾代码没有任何优势。

即使有在异常或不try块, finally块势必执行。 就是这样finally的设计。

如果有在异常try块,则控制权将转移到catch块匹配产生的异常,然后将在控制开关finally阻塞。

但在这种情况下,如果没有在产生的任何异常try块时,控制将不会被传递到catch ,因为没有任何例外块catch
但正如我刚才所说,在finally块势必再次执行。

所以,最后,finally块总是会被执行

在每一种语言,我知道:是的。

没有如果同时在try和catch块在上面的例子异常,控制不传递到finally块。 插图:

try
{
//exception -> control goes to catch block.
}
catch
{
//again exception -> exits showing error
}
finally
{
//control does not reach here
}

注意:如果然而,这上面的代码被包裹有些函数内部并有适当的异常处理即尝试... ... 调用功能catch块,则finally块不会得到执行,并从捕捞到调用函数的捕获控制动作之上。 插图:

try
{
//exception -> goes to catch block.
}
catch
{
//again exception -> goes to finally block
}
finally
{
//code here is executed -> goes to calling function's catch block
}

答案是肯定的。 经过Finally块会发生什么? 为了说明全流量语义,考虑以下因素:

private int TryCatchFinallyFlow()
{
int i, j = 0; // set j to non-zero

try
{
i = 1 / j;
goto lSkip; // comment out;

return i; // comment out

lSkip:;
}
catch (Exception)
{
i = 2;

throw; // comment out
}
finally
{
i = 3;
}

i = 4;

return i;
}

private void button1_Click(object sender, EventArgs e)
{
int i;

try
{
i = TryCatchFinallyFlow();
}
catch (Exception)
{
i = -1;
}

MessageBox.Show(i.ToString());
}

}

你可以用j为0或不为零,并注释掉了三个“注释掉”行试验。 在调试模式下逐步完成。

这将充分展现你的流量是如何工作的。

分类:试捕 时间:2015-03-15 人气:0
本文关键词: 试捕
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.386 (s). 10 q(s)