第5章 异常处理 王德俊 上海交通大学继续教育学院.

Slides:



Advertisements
Similar presentations
网络应用程序设计 2014 JavaBean. JavaBean 及其属性 JavaBean 就是一种 Java 的组件技术 JavaBean 是 Java 类 JavaBean 通过约定的方法名实现属性功能 简单属性 void setXxx(Type value) Type getXxx() boolean.
Advertisements

软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
面向侧面的程序设计 方林博士 本文下载地址:
第三讲 面向对象(上).
项目6 通用堆栈.
四資二甲 第三週作業 物件導向程式設計.
Exception子类的继承关系 Exception ClassNotFoundException
Oracle数据库 Oracle 子程序.
C#程序设计 10软件1、2班 王槐彬 计算机工程学院.
第14章 c++中的代码重用.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
第10讲 Java面向对象编程基础(4) 教学目标 主要内容.
Ch08 巢狀類別 物件導向程式設計(II).
第5章 异常处理 王德俊 上海交通大学继续教育学院.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
Signutil.
.NET 程式設計入門(使用 C#) 講師:鄧智鴻.
第四章 在 C# 中实现 OOP 概念.
Java基础 JavaSE异常.
第七章 异常.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
第4章 面向对象编程方法 王德俊 上海交通大学继续教育学院.
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
第6章 异常的捕获及处理 6.1 异常简介 6.2 异常类的继承结构 6.3 异常处理机制 6.4 异常处理 6.5 本章小结.
第9章 多线程 王德俊 上海交通大学继续教育学院.
$14 异常处理. $14 异常处理 异常处理 错误和异常 C#中异常处理结构 异常的层次结构 使用异常的原则和技巧.
Java习题解析.
Java程序设计 第9章 继承和多态.
第三章 流程控制與例外處理 資訊教育研究室 製作 注意:本投影片僅供上課使用,非經同意,請勿散播或轉載。
辅导课程六.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
例外處理與 物件序列化(Exception Handling and Serialization of Objects)
檔案讀寫與例外處理 (File IO and Exception Handling)
第9讲 Java的继承与多态(一) 类的继承 子类的创建 方法覆盖.
异常及处理.
Ch02-基礎語法.
C/C++/Java 哪些值不是头等程序对象
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
第七章 操作符重载 胡昊 南京大学计算机系软件所.
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
辅导课程八.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
$9 泛型基础.
C++复习3 ----类的继承与派生.
C#面向对象程序设计 $6 深入理解类.
C#程序设计基础 $3 成员、变量和常量.
第7章 异常处理.
Aspect Oriented Programming
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
第4章 Excel电子表格制作软件 4.4 函数(一).
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
辅导课程十五.
第二章 Java基本语法 讲师:复凡.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
辅导课程十二.
3.7 Java的异常处理机制.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
JAVA 程式設計與資料結構 第三章 物件的設計.
第6章 异常处理 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
Presentation transcript:

第5章 异常处理 王德俊 上海交通大学继续教育学院

第5章 异常处理 5.1 异常处理模型 5.2 .NET的Exception层次、属性 5.3 异常的抛出及用户自定义异常

5.2 .NET的Exception层次、属性 5.2.1 .NET的Exception层次 5.2.2 Exception常用属性

5.2.1 .NET的Exception层次 异常处理机制只允许引发和捕捉Exception类的对象及其派生类的对象 命名空间System的Exception类是.NET框架异常层次结构中的基类, Exception类派生的两个最重要的类是ApplicationException和 SystemException类: ApplicationException是一个基类,程序员可以由此创建专用于应用程序 的异常数据类型 程序执行期间,CLR可以在任何位置生成SystemException,大多数此类异 常都可以通过正确编码来避免,此类异常称为运行时异常,而且它们是从 SystemExcetion类派生而来的,如: IndexOutOfRangeException、 NullReferenceException、FormatException、DivideByZeroException等

5.2.1 .NET的Exception层次 如何判断程序会引发异常? 对于.NET框架类中的方法,可以查看MSDN文档,如果一个方法引发 了异常,其描述中就有“Exception”相关主题的内容,其中指定了 方法所引发的异常的类型,并简要描述了引发异常的原因

5.2.2 Exception常用属性 异常处理类型从Exception派生而来,该类的属性常用于阐明 捕捉到的异常的错误消息,其中两个重要的属性是Message和 StackTrace: Message属性保存与异常对象相关的错误消息,可以是异常类型相关 的默认消息,可以是自定义消息 StackTrace属性中包含一个代表方法调用堆栈的字符串,字符串代表 了异常发生时未结束处理的各个方法的顺序列表。

5.3 异常的抛出及自定义异常 在被调用代码中难以决定如何处理捕获的异常,这时可将捕 获的异常向调用代码抛出,由调用代码捕获后处理。 用户可以通过继承已有的相关异常类来定义新的、满足特定 需要的异常类。

5.3 异常的抛出及自定义异常 5.3.1 抛出异常 5.3.2 用户自定义异常

抛出异常有两种方式: 5.3.1 抛出异常 一种是直接抛出捕获的异常,格式如下: throw e; //e为已捕获的异常的名称 5.3 异常的抛出及自定义异常 5.3.1 抛出异常 抛出异常有两种方式: 一种是直接抛出捕获的异常,格式如下: throw e; //e为已捕获的异常的名称 另一种是利用捕获的异常创建新的异常,抛出新建的异常。格式如下: throw new异常类名([参数列表]); 当然,也可以写成: 异常类名 异常对象名 = new 异常类名([参数列表]); throw异常对象名;

考虑下面有关抛出异常的ThrowException程序: 5.3 异常的抛出及自定义异常 5.3.1 抛出异常(续) 【例5.3】 抛出异常的例子。 考虑下面有关抛出异常的ThrowException程序: class testException { int n, m; public void g() n = 10; m = 10; try n = 1 / (n - m); } catch (Exception e) throw new Exception(“这是在方法g()产生的异常:” + e.Message, e); //创建异常重发 // throw e; //异常原样重发 在方法g()中捕获一个零除异常,并利用该异常的Message属性值以及该异常本身作为参数来创建一个新的异常并将之抛出

很多情况下,程序员都可以利用.NET框架中现有的异常类来指 出程序中发生的异常,但有时可能希望为程序中发生的问题创 建更加具体的异常类型 5.3 异常的抛出及自定义异常 5.3.2 用户自定义异常 很多情况下,程序员都可以利用.NET框架中现有的异常类来指 出程序中发生的异常,但有时可能希望为程序中发生的问题创 建更加具体的异常类型 可以根据需要自定义异常类,但定义的异常类必须继承已有的 异常类,直接或间接从System命名空间的ApplicationException 派生而来

5.3 异常的抛出及自定义异常 5.3.2 用户自定义异常 Microsoft声称,用户自定义异常应该从 ApplicationException类派生而来,且应该有一个结尾为 Exception的类名,并需要定义3个构造函数: 一个默认构造函数; 一个接收字符串参数(错误消息)的构造函数; 一个接收字符串参数和异常参数(错误消息和内部异常对象) 的构造函数

class UserException : ApplicationException //定义用户的异常类 { 5.3 异常的抛出及自定义异常 5.3.2 用户自定义异常 关键代码如下: class UserException : ApplicationException //定义用户的异常类 { //重载Exception类的构造函数 public UserException() { } public UserException(string ms):base(ms) { } public UserException(string ms,Exception inner) : base(ms,inner) { } }

【例5.4】创建控制台应用程序MyExceptionClass,定义和使用 用户自定义异常。 要求: 5.3 异常的抛出及自定义异常 5.3.2 用户自定义异常(续) 【例5.4】创建控制台应用程序MyExceptionClass,定义和使用 用户自定义异常。 要求: 定义了一个学生类——student类 该类包含两个私有变量成员:name和score,分别表示学生姓名和 成绩,且name的长度不超过8个字节,score的范围为[0,100]; 包含一个方法成员f(),用于设置name和score。 自定义一个异常类UserException,当对name所赋的值的长度超过8个 字节或者对score所赋的值不在[0,100]范围内时都抛出此自定义异常。

private string name; //姓名,长度不超过8个字节 5.3 异常的抛出及自定义异常 5.3.2 用户自定义异常(续) class student //定义学生类 { private string name; //姓名,长度不超过8个字节 private double score; //成绩,范围为[0,100] public void setInfo(string name, double score) if (name.Length > 8) throw (new UserException("姓名长度超过了8个字节!")); } if (score < 0 || score > 100) throw (new UserException("非法的分数!")); this.name = name; this.score = score;

5.3 异常的抛出及自定义异常 5.3.2 用户自定义异常(续) static void Main(string[] args) { student s = new student(); try s.setInfo("张三", 958.5); } catch (Exception e) Console.WriteLine("产生异常:{0}", e.Message); Console.ReadKey();

在运行过程中由于试图对score赋值958.5,结果导致下列异常被创建和抛出: 5.3 异常的抛出及自定义异常 5.3.2 用户自定义异常(续) 执行该程序 : 在运行过程中由于试图对score赋值958.5,结果导致下列异常被创建和抛出: new UserException("非法的分数!")