《c#异常处理》由会员分享,可在线阅读,更多相关《c#异常处理(15页珍藏版)》请在金锄头文库上搜索。
1、异常处理,本讲要点,学习目标掌握抛出异常、自定义异常理解异常处理机制、异常处理方式了解异常的定义、异常处理的特点重点掌握异常处理的使用方法定义自己的异常类难点异常处理的正确使用,即异常处理的条件,异常处理的概念,异常(Exception):指由于程序运行时发生的错误,从而导致程序错误结束。 异常处理:当程序运行过程中发生了某个异常现象,系统将产生一个相应的异常类对象,并把它交给系统处理,系统负责找到处理错误的代码并执行之。 如: 输入数据x; 5/x; ,如果输入X的值为0,产生异常。,输入数据x;if (x= =0) 提示输入数据有误;else5/x;,每种异常类型都是一个类,分为两类:Sy
2、stem.SystemExceptionSystem.ApplicationException代码段有可能发生异常的时候,我们应该把该代码放置在try中.捕捉到异常后的处理方法放置到catch中。为每个可能的Exception定制解决方法,例如:try .catch(FormatException)MessageBox.Show(.);catch(overflowException)MessageBox.Show(.);catch(Exception ex)MessageBox.Show(.);,执行完catch字句后,程序将继续执行,除后catch字句中有return,throw或者exit
3、.必须正确排列捕获异常的catch字句范围小的Exception放在前面的catch字句中,如果Exception之间有继承关系,把子类放在前面的catch字句中,把父类放到后面的catch字句中。最后放置catch(Exception ex)。使用try-catch-finally来确保一些收尾工作(finally段里的语句总是在try和catch之后执行),例如:trycatchfinally,异常之体系,异常类一、基类Exception异常类二、常见的异常类1、SystemException类:该类是System命名空间中所有其他异常类的基类。(建议:公共语言运行时引发的异常通常用此类)
4、2、ApplicationException类:该类表示应用程序发生非致命错误时所引发的异常(建议:应用程序自身引发的异常通常用此异常类三、与参数有关的异常类此类异常类均派生于SystemException,用于处理给方法成员传递的参数时发生异常1、ArgumentException类:该类用于处理参数无效的异常,除了继承来的属性名,此类还提供了string类型的属性ParamName表示引发异常的参数名称。2、FormatException类:该类用于处理参数格式错误的异常。,异常类四、与成员访问有关的异常1、MemberAccessException类:该类用于处理访问类的成员失败时所引发
5、的异常。失败的原因可能的原因是没有足够的访问权限,也可能是要访问的成员根本不存在(类与类之间调用时常用)2、MemberAccessException类的直接派生类:i、FileAccessException类:该类用于处理访问字段成员失败所引发的异常ii、MethodAccessException类:该类用于处理访问方法成员失败所引发的异常iii、MissingMemberException类:该类用于处理成员不存在时所引发的异常异常类五、与数组有关的异常以下三个类均继承于SystemException类1、IndexOutOfException类:该类用于处理下标超出了数组长度所引发的异常
6、2、ArrayTypeMismatchException类:该类用于处理在数组中存储数据类型不正确的元素所引发的异常3、RankException类:该类用于处理维数错误所引发的异常,异常类六、与IO有关的异常1、IOException类:该类用于处理进行文件输入输出操作时所引发的异常。2、IOException类的5个直接派生类:i、DirectionNotFoundException类:该类用于处理没有找到指定的目录而引发的异常。ii、FileNotFoundException类:该类用于处理没有找到文件而引发的异常。iii、EndOfStreamException类:该类用于处理已经到达
7、流的末尾而还要继续读数据而引发的异常。iv、FileLoadException类:该类用于处理无法加载文件而引发的异常。v、PathTooLongException类:该类用于处理由于文件名太长而引发的异常。异常类七、与算术有关的异常1、ArithmeticException类:该类用于处理与算术有关的异常。2、ArithmeticException类的派生类:i、DivideByZeroException类:表示整数货十进制运算中试图除以零而引发的异常。ii、NotFiniteNumberException类:表示浮点数运算中出现无穷打或者非负值时所引发的异常。,异常处理语句的使用,格式1:
8、 try-catch语句 try语句块中包含可能产生异常的代码,catch中指定对异常的处理,class trycatchstatement public void test() try int b = int.Parse(abc); catch (FormatException ex) Console.WriteLine(ex.Message); ,格式2:try-finally语句 try语句块包含可能产生异常的代码 finally中指定最终都要执行的子语句与格式1比较,程序不提供对异常的处理,只保证finally语句块中的代码一定被执行,class trycatchstatement p
9、ublic void test() try int b = int.Parse(abc); finally Console.WriteLine(执行结束); ,格式3:try-catch-finally(常用格式)try语句块中包含可能产生异常的代码,catch中指定对异常的处理,finally中指定最终都要执行的子语句,放在所有catch后,只能出现一次,class trycatchstatement public void test() try int b = int.Parse(abc); catch (FormatException ex) Console.WriteLine(ex.M
10、essage); finally Console.WriteLine(执行结束); ,throw语句throw语句可以重新引发一个已捕获的异常,还可以引发一个预定义的或自定义的异常,可被外围的try语句接收,throw引发的异常称为显示引发异常,class trycatchstatement public void test() try int b = int.Parse(abc); string str = null; if (str = null) ArgumentException ex = new ArgumentNullException(); throw ex; catch (Ar
11、gumentException ex) Console.WriteLine(ex.Message); finally Console.WriteLine(执行结束); 0,自定义异常,除了可以使用系统预定义的异常以为,还可以根据需要自己定义异常。由Exception或者Exception类的子类派生。 步骤:1.自定义异常类,继承自某个异常2.重写构造函数和属性(Message属性),或者声明方法3.在可能出现问题的地方调用,class ageexception : Exception string _message; /获得父类的错误信息内容 public ageexception() _m
12、essage = base.Message; public ageexception(string strmessage) _message = strmessage; /重写message属性 public override string Message get return _message ; /或者定义方法输出异常信息 public void pm() Console.WriteLine(_message); ,try Console .WriteLine (请输入年龄); int age=int.Parse(Console .ReadLine(); if (age20 | age 10) string message = 你输入的年纪不符合要求!; ageexception a=new ageexception (message ); throw a; catch (ageexception a) Console.WriteLine(a.Message); ,