目录
1.1异常处理概述
在编写程序时,不仅要关心程序的正常操作,还应该检查代码错误及可能发生的各类不可预期的事件。异常处理可以捕获程序执行所发生的错误,通过异常处理可以有效、快速地构建各种用来处理程序异常情况的程序代码。
1.1.1公共异常类
异常类 | 说明 |
System.ArithmeticException | 在算术运算期间发生异常 |
System.ArrayTrpeMismatchException | 当存储一个数组时,如果由于被存储的元素的实际类型与数组的实际类型不匹配而导致报错 |
System.DivideByZeroException | 在试图用零除整数数值时引发 |
System.IndexOutOfRangeException | 在试图用小于零或超出数组界限的下标索引数组时引发 |
System.InvalidCasException | 如果从基类型或接口到派生类型的显示转换在运行时失败,就会引起异常 |
System.NullReferenceException | 在需要使用引用对象的场合,如果使用Null引用,就会引起异常 |
System.OutOfMemoryException | 在分配内存的尝试失败时引发 |
System.OverflowException | 在选中的上下文中进行算术运算、类型转换或转换操作溢出时引发 |
System.StackOverflowException | 挂起的方法调试过多而导致堆栈溢出时引发 |
System.TypeInitializationException | 静态构造函数引发异常并且没有捕捉到它的catch子句时引发 |
1.2异常处理语句
1.2.1try...catch语句
在try语句中防止可能发生异常的程序代码,从而对这些程序代码进行监控;在catch后面防止处理错误的程序代码。代码格式如下:
try
{
//可能出现的异常代码
}
catch(异常类名 异常变量名)
{
//进行异常处理的代码
}
案例:
int a, b;
try
{
a = 1;
b = 0;
int c = a / b;
Console.WriteLine("运行成功");
}
catch (Exception e)
{
Console.WriteLine( "运行失败");
}
Exception是一个基类,所有异常类都继承自它,你自己封装一个也要继承,ex是实现它的实例对象,取啥名随你,一般叫e,取出异常信息直接e.属性名,例如e.message可取出错误信息,当然是否实例化就随你了,因为try catch就是尝试执行try中代码,执行有错误就跳到catch中执行,那我完全可以不实例化e,直接在catch中写throw new Exception(“出错了。。。。”),我完全不需要用e,因为它一旦执行就意味着try中出错了A
1.2.2try...catch...finally语句
将finally语句与try...catch语句相结合,形成try...catch...finally语句。finally语句同样以区块的方式存在,它被放在所有try...catch语句的最后面,程序执行完毕,最后都会跳到finally语句区块,执行其中代码。无论程序是否异常,最后都会执行finally语句区块中的程序代码,其基本格式如下:
try
{
//被监控的代码
}
catch(异常类名 异常变量)
{
//异常处理代码
}
...
finally
{
//程序代码
}
使用catch语句是为了允许处理异常。无论是否发生异常,使用finally子句即可执行清理代码。如果分配了昂贵或有限的资源,则应该释放这些资源的代码放置在finally区块中。
1.2.3throw语句
throw语句用于主动引发一个异常,使用throw语句可以在特定的情形下,自行抛出异常。
throw语句通常与try...catch或try...finally语句一起使用。当引发异常时,程序查找处理此异常的catch语句。也可以使用throw语句重新引发已捕获的异常。