正常执行try后才能执行finally,catch中的语句可能会影响finally的执行

使用 finally 块,可以清理在 Try 中分配的任何资源,而且,即使在 try 块中发生异常,您也可以运行代码。 通常,控件离开 try 语句之后,finally的语句会阻止运行。 正常执行中 break、continue、goto 或 return 语句的执行,或对 try 语句外部异常的传播,可能会导致发生控件转换。

已处理的异常中会确保运行关联的 finally 块。 但是,如果异常未得到处理,则 finally 块的执行取决于如何触发异常展开操作。 此操作又取决于计算机是如何设置的。 有关更多信息,请参见 Unhandled Exception Processing in the CLR(CLR 中的未经处理的异常处理)。

通常,当未经处理的异常中止应用程序时,finally 块是否运行并不重要。 但是,如果您拥有的 finally 块中的语句必须在该环境下运行,则一个解决方案是将 catch 块添加到 try-finally 语句中。 或者,可以捕获可能是在调用堆栈更上方的 try-finally 语句的 try 块中引发的异常。 即可以捕获调用了包含 try-finally 语句的方法中的、或调用了该方法的方法中的、或调用堆栈中任何方法中的异常。 如果未捕获异常,则 finally 块的执行取决于操作系统是否选择触发异常展开操作。

try-catch-return的执行顺序
 
不管是在try中,还是在catch中,只要他们中有return和底部的finally同时存在,就在程序运行最后先执行finally,再执行return,try-catch-return中共享一个局域(变量在其中保持一致)
 
       static void Main()
{
Console.WriteLine(Test());
Console.ReadKey();
} static int Test()
{
int num = 0;
try
{
num = 1;
throw new Exception("手动控制抛出异常");
return num;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return num;
}
finally
{
num++;
Console.WriteLine("我在Finally中num={0}", num);
}
}

C# try-catch-return的更多相关文章

  1. 有return的情况下try catch finally的执行顺序(转)

    结论:1.不管有木有出现异常,finally块中代码都会执行:2.当try和catch中有return时,finally仍然会执行:3.finally是在return后面的表达式运算后执行的(此时并没 ...

  2. try catch finally的执行顺序(有return的情况下)

    结论:1.不管有木有出现异常,finally块中代码都会执行:2.当try和catch中有return时,finally仍然会执行:3.finally是在return后面的表达式运算后执行的(此时并没 ...

  3. 有return的情况下try catch finally的执行顺序

    结论:1.不管有木有出现异常,finally块中代码都会执行:2.当try和catch中有return时,finally仍然会执行:3.finally是在return后面的表达式运算后执行的(此时并没 ...

  4. Java中的try,catch(Exception e),finally及return执行顺序

    结论: ①就算之前return,finally也会执行 ②finally的计算结果不影响之前的return值 ③finally的return值一定是最后的返回结果,因此将return放入finally ...

  5. 关于try...catch...finally中return的疑惑

    原文:http://www.cnblogs.com/and_he/archive/2012/04/17/2453703.html 关于try...catch...finally里面的return一直是 ...

  6. try、catch、finally的使用分析---与 return 相关

    看了一篇文章,讲解的是关于java中关于try.catch.finally中一些问题 下面看一个例子(例1),来讲解java里面中try.catch.finally的处理流程   1 2 3 4 5 ...

  7. 有return的情况下try catch finally的执行顺序(最有说服力的总结)

    结论:1.不管有木有出现异常,finally块中代码都会执行:2.当try和catch中有return时,finally仍然会执行:3.finally是在return后面的表达式运算后执行的(此时并没 ...

  8. Java基础知识强化之IO流笔记06:有return的情况下try catch finally的执行顺序

    1. 给出结论: (1)不管有木有出现异常,finally块中代码都会执行:(2)当try和catch中有return时,finally仍然会执行:(3)finally是在return后面的表达式运算 ...

  9. try..catch..finally执行顺序return

    try..catch..finally这个语法大家都很熟悉,就是捕捉异常.处理异常,面试中经常被问到的一个问题是:如果在try...catch中的某某地方return了,那么之后的某某步骤还会不会执行 ...

  10. throw和throws的区别以及try,catch,finally在有return的情况下执行的顺序

    一,抛出异常有三种形式,一是throw,一个throws,还有一种系统自动抛异常.下面它们之间的异同. (1).系统自动抛异常 1.当程序语句出现一些逻辑错误.主义错误或类型转换错误时,系统会自动抛出 ...

随机推荐

  1. Chrome Extension 的 webRequest模块的解读

    Chrome Extension 的 webRequest模块的解读   文档在此:http://developer.chrome.com/trunk/extensions/webRequest.ht ...

  2. vbs脚本

    巧用Vbs SendKeys 可以做的事 发布: 2014-04-06 10:00:20 | 作者: | 来源: 按键精灵资源站 巧妙使用VBS中的SendKeys命令(这个命令的作用就是模拟键盘操作 ...

  3. c++迭代器失效问题

    参考两篇文章:https://blog.csdn.net/skyroben/article/details/70877008 https://lichanghao.github.io/2016/08/ ...

  4. navicat数据库同步

    10.168.95.246

  5. thinkphp 内存查询表 防止多次查库

    //从内存查询 表 以防止多次查库 private static function selectTable($tableName,array $where,$getFirst=false){ $res ...

  6. NOIP2013T1 转圈游戏 快速幂

    描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置, --, 依此 ...

  7. SqlServer显示“正在还原...”

    还原数据库时,提示还原成功,但是数据库一直显示“正在还原...”的状态. 可以通过执行以下命令即可 RESTORE DATABASE DB_NAME WITH RECOVERY 原因: 关于recov ...

  8. 对比JavaScript的入口函数和jQuery的入口函数

    JavaScript的入口函数要等到页面中所有的资源(包括图片.文件)加载完成才开始执行. jQuery的入口函数只会等待文档数加载完成就开始执行,并不会等待图片.文件的加载.

  9. 错误:the apk for your currently selected variant(app-release-unsigned.apk)is not signed.Please specity a signing configuration for this variant(release)

    1:导入android studio project 时总会出现运行处一个红色叉号,这里可以点击选择叉号上面显示的Edit Configurations 查看右下角的错误警告信息.: 2:记录错误: ...

  10. 互联网的大数据神话——NoSQL

    本文摘抄于:<纵横大数据--云计算数据基础设施> 何小朝著 Chapter5. NewSQL--关系数据库联邦/联合 5.4.2  互联网的神话 对强一致性的要求放松,是因为 互联网的分布 ...