第九章 异常处理

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

10
9.4 抛出异常(throw)
• •
在语句中使用throw抛出异常 要求抛出FCL异常类的实例(Exception或Exception类的子类)
throw new Exception();
11
抛出异常
throw语句举例
using System;
throw语句一般放在 if语句中,只有当条件 public class Test 得到满足(用户自己 { public static void Main( ) 定义的错误发生)才 执行. { string s1=null; 异常必须是Exception if(s1= = null) 及其子类. { throw new ArgumentNullException( ); } }}
• •
Protected的属性
HResult 获取或设置 HRESULT,它是分配给特定异常的编码数值
Public的方法
GetBaseException 当在派生类中重写时,返回 Exception,它是一个或多个并发的异常的根源
7
系统定义的经常用到的异常
System.OutOfMemoryException System.StackOverflowException System.NullReferenceException Syetem.IndexOutOfRangeException System.ArithmaticException System.DivideByZeroException System.OverflowException System.ArrayTypeMismatchException 用new分配内存失败 递归过多过深 对象为空 数组边界超出 算术操作异常的基类 除零错 溢出错误 数组类型不匹配
5
9.2 异常类的继承关系
• •
FCL中所有的异常类均中System.Exception派生 默认所有系统异常派生于System.SystemException,所有的应用程序异常派生 于System.ApplicationException Exception SystemException OutOfMemoryException IOException NullReferenceException ApplicationException
目标: 本章旨在向学员介绍: 1)Exception类的属性和方法 2)异常处理机制 3)throw语句 4)自定义异常
时间:1.5学时 教学方法:讲授PPT+ 上机练习
3
9.1 异常简介

异常是一种封装了反常程序事件信息的对象,C#用异常来处 理错误和反常情况。 当异常抛出时,当前函数的执行会停止,堆栈展开,直到找到 正确的异常处理代码,异常处理代码就是处理异常的代码块。 如果异常得到处理,程序会解决问题并继续执行。即使程序不 能继续执行,捕获异常也能使程序输出错误信息并安全地终止 程序。
8
9.3 异常处理机制
• •
try
– 要执行的语句体
catch – 捕获异常实例 – 可以捕获多个异常 – 捕获多异常的顺序 • finally – 最终要执行的语句块
发生异常 catch块 finally块
try块 无异常 finally块
9
9.2异常处理机制举例
int i = 0 ; string [] greetings = {"Hello world !","No,I mean it !","HELLO WORLD!"}; while ( i < 4 ) { try { Console.WriteLine(greetings[i]); } catch( IndexOutOfRangeException ex ) { Console.WriteLine("异常发生,catch子句捕获了这个异常,并进行了处理 ,程序继续运行。"); i=-1; } finally { i++; Console.WriteLine("无论异常是否发生,finally子句每次都被执行"); } }
6
Exception类成员

Public的属性
Data HelpLink InnerException Message Source StackTrace TargetSite 获取一个提供用户定义的其他异常信息的键/值对的集合 获取或设置指向此异常所关联帮助文件的链接 获取导致当前异常的 Exception 实例 获取描述当前异常的消息 获取或设置导致错误的应用程序或对象的名称 获取当前异常发生时调用堆栈上的帧的字符串表示形式 获取引发当前异常的方法


4
异常简介
int i = 0 ; string [] greetings = {"Hello world !","How are you ?","Thank you !"}; while ( i < 4 ) { Console.WriteLine(greetings[i]); i++; } 数组越界异常
16
小结
• • • •
掌握Exception类的常用属性和方法以及构造器 会运用try…catch()…finally…机制 掌握throw用法 会自定义异常
17
源自文库8
13
9.6 算术溢出及检查

C#中的溢出检查 – checked、unchecked • checked强制执行溢出检查 • 默认为unchecked • 在checked中如果有溢出,则抛出溢出异常
byte b=255; checked { b++; } Console.WriteLine(b);
C#编程基础
1
课程结构
内容
第一章:概述 第二章:Visual Studio .NET简介 第三章:变量和操作符 第四章:流程控制语句 第五章:数组 第六章:面向对象基础 第七章:面向对象高级特性 第八章:结构和枚举 第九章:异常处理
课时(H)
1 0.5 1 1 2 7 9 1 1.5
2
第九章:异常处理
14
恰当的使用异常
• • • • •
不能有太多的finally块内容 有选择地进行捕获 从异常中恢复 在发生无法恢复的异常时 隐藏实现的细节
15
练习

从控制台输入2个正整数,放入一个整形数组,然后输出。 要求: ① 如果输入数据不为整数,要捕获int.parse()产生的异常 ,显示“请输入整数”。 ② 如果输入参数不足2个的异常,要捕获数组越界异常, 显示“请输入至少2个整数”。 ③ 如果输入负数,要捕获自定义异常NegativeException ,显示“请输入正数”。
12
9.5自定义异常

必须继承Exception类或其子类,通常继承 ApplicationException类
public class UserException : Exception{ UserException(){} UserException(String s):base(s){ //…; } }
相关文档
最新文档