C#中的异常处理

  • Post author:
  • Post category:其他


一、 异常的概念

C#语言的异常处理功能在程序运行期间发生的任何意外或异常情况。异常处理功能使用Try、catch和finally关键字来尝试执行可能失败的操作、在确定合理的情况下处理故障、以及在事后清理资源。

二、异常类

在BCL中定义了很多类,每一个类代表一个指定异常类型。当一个异常发生时,CLR:

1、 创建了该类型的异常对象;

2、 寻找适当的catch 子句来处理它;

.NET Framework 类库中的所有异常都派生于 Exception 类,异常包括系统异常和应用异常。

默认的所有系统异常派生与System.SystemException,所有的应用程序异常派生与System.ApplicationException。

系统异常一般不可预测,比如内存堆栈溢出,空对象引用,权限限制,硬件读取错误等等

应用程序异常一般可以预测,比如文件对象找不到啦,值不在范围内啦,数据类型不一致等 等,设计,处理逻辑可以判断的。

还有一些异常对象含有只读属性,带有导致该异常的信息。这些属性的其中一些如下图

在这里插入图片描述

常见的异常类如下图

在这里插入图片描述

常见的系统异常如下图:

在这里插入图片描述

三、异常处理

在C#中语言中异常与异常处理语句即try….catch ….finally

在上述异常处理的形式中所用到的关键字其含义如下:

Try :用于检查发生的异常,并帮助发送任何可能的异常。

Catch: 以控制权更大的方式处理错误,可以有多个catch子句。

Finally:无论是否发生引发了异常,finally的代码块都将被执行。

1、Try语句

Try语句用来指明为避免出现异常而被保护的代码段,并在发生异常时提供代码处理异常。

Try语句是由三个部分组成:

(1)、try块包含为避免出现的异常而被保护的代码。

(2)、catch子句部分含有一个或者多个catch子句。这些是处理代码异常的代码段,它们称为是异常的处理程序

(3)、finally块含有在所有情况下都要被执行的代码,无论有没有异常的发生。

在这里插入图片描述

2、Catch子句

Catch子句处理异常。它有三种形式,允许不同级别的处理。如下图:

3、 Finally块

如果程序的控制流进入了一个带finally块的try语句,那么finally 始终会被执行,如下图:

(1)、如果在try块内部没有异常发生,那么在try块的结尾,控制流跳过任何catch子句并到finally块。

(2)、如果在try块内部发生了异常,那么在catch子句段无论哪一个适当的catch子句被执行,接着就是finally块的执行。

在这里插入图片描述

即使try块有return语句或在catch’块中抛出一个异常,finally块也总是会返回到调用代码之前执行,例如下面这个代码一样,在try块的中间有一条return语句,他在某条件下被执行。这不会使他绕过finally语句。

在这里插入图片描述



版权声明:本文为saoang原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。