正常执行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);
}
}

最新文章

  1. 获取系统进程信息和进程依赖的dll信息
  2. iOS字体换算 PS的字体大小 <=>iOS上字体大小
  3. Eclipse反编译工具Jad及插件JadClipse配置(转)
  4. Elasticsearch aggregations API
  5. java.util.Map源码分析
  6. mysql hash索引优化
  7. genymotion+Oracle VM VirtualBox + eclipse + appium 脚本运行慢解决步骤
  8. Redis安装和基础介绍
  9. [LeetCode] Reaching Points 到达指定点
  10. 克隆Rockey6加密狗复制资料
  11. Oracle客户端连接数据库配置
  12. 自定义chromium浏览器
  13. np.newaxis
  14. android 简单的画图片
  15. Elemet-技巧
  16. linux git 报错提示 fatal: 'origin' does not appear to be a git repository 解决办法
  17. qcow2、raw、vmdk等镜像格式的比较和基本转换
  18. [bzoj 1616][Usaco2008 Mar]Cow Travelling游荡的奶牛
  19. VMTurbo:应对散乱虚拟机的强劲工具
  20. Python爬取招聘信息,并且存储到MySQL数据库中

热门文章

  1. Linux开发环境搭建与使用——Linux必备软件之Samba
  2. Jquery-Uncaught ReferenceError: $ is not defined报错
  3. BZOJ3172 单词 Fail树
  4. mysql 10060远程不能访问
  5. Android开机logo修改方法 【转】
  6. Cache操作类
  7. lightoj--1005--Rooks(组合数)
  8. Nginx实战系列之功能篇----后端节点健康检查
  9. JavaScript 面向对象(随笔)
  10. .NET微服务架构及API网关