当一个异常抛出时,它会改变程序的执行流程。因此不能保证一个语句结束后,它后面的语句一定会执行,在 C# 中这个问题可以用 finally 解决。

为了确保一个语句总是能执行(不管是否抛出异常),需要将该语句放到一个 finally 块中,finally 要么紧接在 try 块之后,要么紧接在 try 块之后的最后一个 catch 处理程序之后。

只要程序进入与一个 finally 块关联的 try 块,则 finally 块始终都会运行 -- 即使发生了一个异常。

代码如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace CheckedAndUnchecked
{
class Program
{
static void Main(string[] args)
{
{
try
{
int a;
string b; Console.WriteLine("请输入一个整数");
b = Console.ReadLine();
a = int.Parse(b);
} catch (Exception ex)
{
Console.WriteLine(ex);
} finally
{
Console.WriteLine("finally块内总是能运行到"); // 总是能执行到这里
}
}
}
}
}

因为 try 会捕捉异常,在此处输入 1.0,格式不正确,则 runtime 会捕捉到异常,但 finally 块内的代码却始终会执行。

执行后结果如下:

如果一个异常被抛出,且在本地捕捉到,则首先运行异常处理程序,然后运行 finally 块;

如果异常未能在本地捕捉到,则首先运行 finally 块,再去上一级搜索一个匹配的异常处理程序并运行。

最新文章

  1. /etc/ppp/chap-secrets
  2. Lesson 19 Sold out
  3. 《C++ 101条建议》学习笔记——第一章快速入门
  4. C# DllImport“调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配 ”
  5. 一个页面中显示多个button时总行数计算公式。
  6. GPS围栏两个多边形相交问题的奇葩解法
  7. 如何伪装成为一名前端(JS方向)
  8. 1014 C语言文法
  9. Hadoop MapReduce概念学习系列之mr程序组件全貌(二十)
  10. 永久关闭防火墙和selinux
  11. C语言知识总结
  12. iOS 主动抛出异常
  13. 论文笔记(4):Fully Convolutional Networks for Semantic Segmentation
  14. 用深信服AC控制方位话机注册链路的开、关
  15. Jquery动态添加/删除表格行和列
  16. 如何将SqlServer中表结构以及表数据全部导出
  17. Java学习——Applet菜单
  18. h5项目如何打成war包
  19. git命令:全局设置用户名邮箱配置
  20. t添加最佳视口

热门文章

  1. 【计算机网络】HTTP协议详解
  2. mysql的grant权限参数汇总
  3. Simditor 富文本编辑器
  4. 使用Sublime Text 3 编写python
  5. oracle修改字段类型由varchar2修改为clob类型
  6. create-react-app创建项目后运行npm run eject命令报错解决办法
  7. thymeleaf初步使用
  8. 新疆大学ACM-ICPC程序设计竞赛五月月赛(同步赛)- XOR(二进制使用)
  9. disable enable 所有其他表关联的外键
  10. [BZOJ 1266] 上学路线Route