什么是异常?
异常是指在程序运行过程中,发生错误会导致程序退出,这种错误,就叫做异常。处理这种错误,叫异常处理。
异常处理如何操作?
C# 异常处理是建立在四个关键字之上的:try、catch、finally和throw。
- try:一个try块标识了一个将被激活的特定的异常的代码块。后跟一个后多个catch块。简单的说就是可能会出现错误的代码块要放在try中。
- catch:程序通过异常处理程序捕获异常。catch关键字标识异常的捕获。
- finally:finally块用于执行给定的语句,不管是否会出现异常都会执行。就好比你打开一个文件,不管是否出现异常,你都要关闭这个文件
- throw:当问题出现时,程序抛出一个异常。使用throw关键字来抛出异常。
示例程序代码:声明一个有10个元素的数组,通过循环打印出20个元素。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _18trycatchDemo
{
class Program
{
static void Main(string[] args)
{
try
{
int[] arr = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
for (int i = 0; i < 20; i++)
{
Console.WriteLine(arr[i] + " ");
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
当打印完数组arr的10个元素之后,想要再打印第11个元素的时候,程序就会捕获异常,并输出异常的信息“索引超出了数组界限”。
C#中的常用异常类
1、SystemException类:该类是System命名空间中所有其他异常类的基类。(建议:公共语言运行时引发的异常通常用此类)
2、ApplicationException类:该类表示应用程序发生非致命错误时所引发的异常(建议:应用程序自身引发的异常通常用此类)
与参数有关的异常类
此类异常类均派生于SystemException,用于处理给方法成员传递的参数时发生异常
1、ArgumentException类:该类用于处理参数无效的异常,除了继承来的属性名,此类还提供了string类型的属性ParamName表示引发异常的参数名称。
2、FormatException类:该类用于处理参数格式错误的异常。
与成员访问有关的异常
1、MemberAccessException类:该类用于处理访问类的成员失败时所引发的异常。失败的原因可能的原因是没有足够的访问权限,也可能是要访问的成员根本不存在(类与类之间调用时常用)
2、MemberAccessException类的直接派生类:
- i、FileAccessException类:该类用于处理访问字段成员失败所引发的异常
- ii、MethodAccessException类:该类用于处理访问方法成员失败所引发的异常
- iii、MissingMemberException类:该类用于处理成员不存在时所引发的异常
与数组有关的异常
以下三个类均继承于SystemException类
1、IndexOutOfException类:该类用于处理下标超出了数组长度所引发的异常
2、ArrayTypeMismatchException类:该类用于处理在数组中存储数据类型不正确的元素所引发的异常
3、RankException类:该类用于处理维数错误所引发的异常
与IO有关的异常
1、IOException类:该类用于处理进行文件输入输出操作时所引发的异常。
2、IOException类的5个直接派生类:
- i、DirectionNotFoundException类:该类用于处理没有找到指定的目录而引发的异常。
- ii、FileNotFoundException类:该类用于处理没有找到文件而引发的异常。
- iii、EndOfStreamException类:该类用于处理已经到达流的末尾而还要继续读数据而引发的异常。
- iv、FileLoadException类:该类用于处理无法加载文件而引发的异常。
- v、PathTooLongException类:该类用于处理由于文件名太长而引发的异常。
与算术有关的异常
1、ArithmeticException类:该类用于处理与算术有关的异常。
2、ArithmeticException类的派生类:
- i、DivideByZeroException类:表示整数货十进制运算中试图除以零而引发的异常。
- ii、NotFiniteNumberException类:表示浮点数运算中出现无穷打或者非负值时所引发的异常。