awe*_*awe 47 .net vb.net exception-handling try-catch-finally
我看到Finallyin Try .. Catch将始终在try catch块执行的任何部分之后执行.
是否有任何不同,只是跳过该Finally部分,然后在try catch块之外运行它?
Try
'Do something
Catch ex As Exception
'Handle exception
Finally
'Do cleanup
End Try
Run Code Online (Sandbox Code Playgroud)
Try
'Do something
Catch ex As Exception
'Handle exception
End Try
'Do cleanup
Run Code Online (Sandbox Code Playgroud)
kem*_*002 68
是的,它是不同的.最后将始终运行(禁止程序崩溃).如果函数退出try catch块内部,或者在try或catch中抛出另一个错误,则finally仍将执行.您不会使用finally语句获得该功能.
pas*_*ute 12
带四个单选按钮的代码:
完成CATCH
private void checkFinally()
{
try
{
doFinally();
}
catch
{
Console.WriteLine(" Breaking news: a crash occured. ");
}
}
private void doFinally()
{
Console.WriteLine(" ");
Console.Write("Here goes: "
+ (radioReturnInTry.Checked ? "2. Return in try: "
: (radioReturnInCatch.Checked? "3. Retrun in catch: "
: (radioThrowInCatch.Checked? "4. Throw in catch: "
: "1. Continue in catch: "))) );
try
{
if (radioReturnInTry.Checked)
{
Console.Write(" Returning in try. ");
return;
}
Console.Write(" Throwing up in try. ");
throw new Exception("check your checkbox.");
}
catch (Exception ex)
{
Console.Write(" ...caughtcha! ");
if (radioReturnInCatch.Checked)
{
Console.Write("Returning in catch. ");
return;
}
if (radioThrowInCatch.Checked)
{
Console.Write(" Throwing up in catch. ");
throw new Exception("after caught");
}
}
finally { Console.Write(" Finally!!"); }
Console.WriteLine(" Done!!!"); // before adding checkboxThrowInCatch,
// this would never happen (and was marked grey by ReSharper)
}
Run Code Online (Sandbox Code Playgroud)输出:
总结一下:最后要注意两件事:
最后总结一下"最后":如果你试过,最后没有什么特别的,并且
最后但并非最不重要的(最后):如果你的代码中有一个你没有捕获的异常,你的代码将会飞,而不会达到最终状态.
希望这很清楚.(现在是给我的......)
摩西
最后包含需要在所有条件下评估的代码[无论是否发生异常].
如果不执行finally块,就无法退出try块.如果finally块存在,则始终执行.(此声明适用于所有意图和目的.有一种方法可以在不执行finally块的情况下退出try块.如果代码执行System.exit(0);从try块中,应用程序终止而不是finally另一方面,如果你在try块期间拔掉机器,那么finally也不会执行.)
主要用途是处理物体.当您想要关闭用户定义的资源(如文件,打开的资源(db stmts))时,它将非常有用.
编辑
最后也不会在stackoverflow异常后执行.
区别在于,当try块中的代码引发该块未捕获的异常时catch。
通常,catch块会捕获特定类型的异常,并让其他任何内容通过。在这种情况下,该finally块仍将运行。
如果finally块中的代码,该try块也将运行return。
| 归档时间: |
|
| 查看次数: |
38900 次 |
| 最近记录: |