第12章+异常处理.
第12章 异常处理
算术运算时向下溢出
算术运算时向上溢出 内部计算时发生作用域的错误 表示一个参数值不在允许的范围之内 尝试创建一个长度超过最大允许值的对象 表示向函数传入无效参数 执行一段程序所需要的先决条件不满足
20 <人像>
标准异常类的基础
• 其中有三个类是标准异常类的基础
12.4 标准程序库异常处理
<全屏文字>
标准异常类的基础
• exception:标准程序库异常类的公共基类 • logic_error表示可以在程序中被预先检测到的异常
▫ 如果小心地编写程序,这类异常能够避免
• runtime_error表示难以被预先检测的异常
22 <人像>
例12-3 三角形面积计算
12.4 标准程序库异常处理
例12-3 三角形面积计算
exception
bad_typeid bad_exception logic_error
ios_base::failure
<全屏文字>
异常类 bad_alloc bad_cast bad_typeid bad_exception பைடு நூலகம்os_base::failure
C++标准库各种异常类所代表的异常 19
头文件 exception new typeinfo typeinfo ios 用new动态分配空间失败 执行dynamic_cast失败(dynamic_cast参见8.7.2节) 对某个空指针p执行typeid(*p)(typeid参见8.7.2节) 当某个函数fun()因在执行过程中抛出了异常声明所不允许的异常而调 用 unexpected() 函数时,若 unexpected() 函数又一次抛出了 fun() 的异 常声明所不允许的异常,且fun()的异常声明列表中有bad_exception, 则会有一个bad_exception异常在fun()的调用点被抛出 用来表示C++的输入输出流执行过程中发生的错误 异常的含义
c第12章Web应用程序的调讲义试和异常处理
12.2.2 Web.config文件常用配置
Web.config是XML文件,其以层次结构的方式保存 应用程序的配置信息。在Web.config文件中, 所有的配置信息都保存在下列代码之间。 01 <configuration> 02 <system.web> 03 //存放配置信息的地方 04 </system.web> 05 </configuration>
12.2.1 在Web.config中启动调试
在Web项目中,通过配置Web.config文件可以启动 调试,也可以禁用调试。若要启动调试,必须在项目属性 页中启用调试器,同时必须在项目的 Web.config文件中启用调试。Web.config文件是一个XML 文件,使用任何标准的文本编辑器都可以打开。
12.1.1 什么是跟踪
跟踪是引入的新功能,就是对Web应用程序中变 量的值和代码执行情况进行底层了解。其分为页面级跟踪和应 用程序级跟踪两种。要对Web应用程进行调试、要了解已经运 行的应用程的工作情况、要知道应用程的特定行为等,都可以 通过对Web应用程进行跟踪来实现。例如在服务器端,通过跟 踪可以看到它所接受的请求,可以看到它的会话状态等。在 中,有一个跟踪查看器,其对跟踪提供了很好的支持 。下列是有关跟踪查看器的一些应用方面。
12.3.2 使用Page_Error事件进行错误处理
在12.3.1节中,介绍了使用Web.config处理错误的方 法。还提供了另外两方法:Page_Error事件和 Application_Error事件。其中,Page_Error事件提供一种 捕获在页级别出现的错误的方法。但Page_Error事件的 处理程序只会对产生错误的具体页面有效,因此可以只是 显示错误信息,也可以记录事件或执行其他的操作。下面 举例说明如何响应Page_Error事件来处理发生于某一具 体页面的错误。
第12章异常处理-Java程序设计项目式教程-范立南-清华大学出版社
12.2.2非运行时异常
非运行时异常是RuntimeException以外的异常, 类型上都属于Exception类及其子类,如 IOException、SQLException等以及用户自定义 的Exception异常, 如果不处理,程序就不能 编译通过。
12.3 异常的捕获和处理
Java异常的捕获和处理不容易,如果处理不当,不但会让程序代码 的可读性大大降低,而且导致系统性能低下,甚至引发一些难以 发现的错误。 Java异常处理涉及到五个关键字,分别是:try、catch、finally、 throw、throws。 1.异常处理的基本语法 在java中,异常处理的完整语法是: try{
try、catch、finally三个语句块均不能单独使用,三者 可以组成 try...catch...finally、try...catch、try...finally三 种结构,catch语句可以有一个或多个,finally语句最 多一个。
3.throw、throws关键字
throw关键字是用于方法体内部,用来抛出一个 Throwable类型的异常,由方法体内的语句处理;
//程序代码 }catch(异常类型 异常的变量名){ //异常处理代码 }finally{ //不管异常是否发生,总是要执行的代码 }
2.对代码段的解释 try语句块,表示要尝试运行代码,代码发生异常时,
会抛出异常对象。
catch语句块会捕获try代码块中发生的异常并在其代码 块中做异常处理,catch语句带一个Throwable类型的参数, 表示可捕获异常类型。出现异常时,catch会捕获到发生的 异常,并和自己的异常类型匹配,若匹配,则执行catch块 中代码,并将catch块参数指向所抛的异常对象。 finally语句块是紧跟catch语句后的语句块,这个语句块总 是会在方法返回前执行,而不管是否try语句块是否发生异 常。并且这个语句块总是在方法返回前执行,目的是给程 序一个补救的机会。
计算机基础与软件设计-第12章-异常处理
10
try语句
try语句块的作用是启动异常处理机制。其格式为:
try {
<语句序列> }
上述的<语句序列>中可以有函数调用。例如,在调用函数f 的函数中,可把对f的调用放在一个try语句块中:
try {
f(filename); }
f(filename);//如果在函数f中抛掷了char *类型的异常, //则程序转到try后面的catch(char *str)处理。
} catch (char *str) {
cout << str << “不存在!”<< endl; cout << “请重新输入文件名:” << endl; cin >> filename; f(filename); }
16
关于try、throw和catch几点注意
在try语句块的<语句序列>执行中如果抛掷(throw)了异 常对象,但其后没有能够捕获该异常对象的catch语句,则 由函数调用链上的上一层函数中的try语句的catch来捕获。
如果抛掷异常对象的throw语句不是由程序中的某个try语句 块中的<语句序列>调用的,则抛掷的异常不会被程序中的 catch捕获。
就地处理(在发现错误的地方处理异常)
调用C++标准库中的函数exit或abort终止程序执行。 根据不同的情况给出不同的处理。
异地处理(在非异常发现地处理异常)
通过函数的返回值或指针/引用类型的参数把异常情况通知函数的调 用者。
异常事件上报处理管理制度
异常事件上报处理管理制度第一章总则第一条为了规范医院内部异常事件的上报与处理流程,保障医院的安全与稳定,提高医院的应急管理水平,订立本管理制度。
第二条异常事件指在医院日常运营过程中显现的与正常工作流程不符或可能导致安全隐患的事件,包含但不限于医疗事故、设备故障、安全事故、突发事件等。
第三条异常事件的上报和处理应遵从及时、准确、公开、透亮的原则,科学、合理、规范的程序。
第二章异常事件上报第四条任何医院员工发现或了解到异常事件发生,应立刻依照下列程序进行上报:1.对发现的异常事件进行初步推断和评估,推断是否属于需要上报的范畴;2.在异常事件发生现场采取必需的人身安全措施;3.快速向本身所在的部门负责人报告情况,并寻求必需的引导和支持;4.部门负责人在接到报告后应立刻将异常事件上报给医院管理层。
第五条异常事件的上报应供应以下相关信息:1.异常事件的类型和具体描述;2.发生异常事件的时间、地方与人员;3.参加应急处理的人员及其联系方式;4.初步推断的原因与后果;5.需要采取的紧急措施。
第六条异常事件上报应确保信息的完整性和准确性,不得有意隐瞒事实,不得捏造虚假信息。
第七条异常事件上报可以通过以下方式进行:1.口头汇报:面对面、电话等直接口头告知上级;2.书面报告:通过电子邮件、内部系统等书面形式进行上报;3.纸质报告:填写医院规定的异常事件上报表进行提交。
第三章异常事件处理第八条异常事件上报后,医院管理层应快速组织相关部门进行处理,并依照以下程序进行:1.成立紧急处理小组,由相关部门负责人及相关专家构成;2.对异常事件进行综合调查和分析,查清事件的原因、责任以及直接或潜在的影响;3.设定处理方案,明确责任分工,采取乐观措施防止事件的连续扩大;4.依照处理方案渐渐打开应急处理工作,并及时向相关人员通报处理进展情况;5.对处理结果进行评估和总结,形成处理报告并提交医院领导。
第九条医院应建立健全异常事件处理记录和归档制度,确保全部处理过程、决策、结果得到准确记录和追溯。
--C 教程 郑莉 李宁 12_容错及异常处理基础新
第十二章 容错及异常处理基础
清华大学 郑 莉
学习目标
2
6/1/2 020
• 掌握异常的抛出和捕获方法; • 掌握异常对象的声明方式; • 了解异常的接口声明和异常规范的使用。
3
目录
6/1/2
020
12.1 异常处理的基本思想
12.2 抛出异常
12.3 捕获异常 12.4 异常对象 12.5 标准程序库异常处理 12.6 异常规范
• 当异常被抛掷以后,catch子句便依次被检查,若 某个catch子句的异常类型声明与被抛掷的异常类 型一致,则执行该段异常处理程序。如果异常类 型声明是一个省略号(…),catch子句便处理任 何类型的异常,但这段处理程序必须是try块的最 后一段处理程序。try-catch块的语法如下
▫ try 复合语句
12.2抛出异常
5
6/1/2 020
• 抛出异常
▫ throw表达式的语法为:
▫ throw 表达式
• 如果某段程序中发现了自己不能处理的异常,就 可以使用throw表达式抛掷这个异常,将它抛掷 给调用者。throw的操作数表示异常类型,语法 上与return语句的操作数相似,如果程序中有多 处要抛掷异常,应该用不同的操作数类型来互相 区别,操作数的值不能用来区别不同的异常。
12.3 捕获异常
例12-3(续)
13
6/1/2 020
运行结果: Please input a positive interger: 8 2.82843 Please input a positive interger: -2 It is a negative interger
12.3 捕获异数中除数为零6/1/的2 异
第11章异常处理
第11章 异 常 处 理 其中:
(1) try:将可能出现错误的程序代码放在try块中,对try块中 的程序代码进行检查,可能会抛出一个或多个异常。因此,try 后面可跟一个或多个catch。
(2) catch:其功能是捕获异常,参数ExceptionObject是 ExceptionType类的对象,这是由前面的try语句生成的。 ExceptionType是Throwable类中的子类,它指出catch语句中所处 理的异常类型。catch捕获异常的过程中,要将Throwable类中的 异常类型和try语句抛出的异常类型进行比较,若相同,则在 catch中进行处理。
At c11_2.main(c11_2.java:11) end
第11章 异 常 处 理 11.2.2 嵌套try-catch-finally语句
Java语言的try-catch-finally语句可以嵌套,即在try块中可以 包含另外的try-catch-finally语句。
【示例程序c11_3.java】 使用嵌套的try-catch-finally语句自 行处理异常。
RuntimeException类 CheckedException类
Error子类
RuntimeException子类 CheckedException子类
图11.2 异常类的继承结构
第11章 异 常 处 理
在Java语言中所有的异常类都继承自ng.Throwable类。 Throwable类有两个直接子类:一个是Error子类,它包含Java系 统或执行环境中发生的异常,这些异常是用户无法捕捉到的异 常;另一个是Exception类,它包含了一般性的异常,如I/O异常, SQL异常,这些异常是用户可以捕捉到的异常,可以通过产生 它的子类来创建自己的异常处理。下面分别论述。
教学课件第10章异常处理
10.5.2 使用throw语句抛出异常
在通常情况下,程序发生错误时系统会自动 抛出异常,而有时希望程序自行抛出异常, 可以使用throw语句来实现。
throw语句通常用在方法中,在程序中自行 抛出异常,使用throw语句抛出的是异常类 的实例,通常与if语句一起使用。
10.5.2 使用throw语句抛出异常
} } catch (ArithmeticException e) {
System.out.println("除数为0异常。"); }catch (ArrayIndexOutOfBoundsException e) {
System.out.println("intArray数组下标越界异常。"); } System.out.println("程序正常结束。");
10.4.3 使用try-finally处理异常
try-finally语句块的语法格式如下:
try{ 需要执行的语句
} finally{ 一定会被处理的语句
}
图10-1 try、catch、finally语句块的执行
10.5 抛出异常
10.5.1 使用throws声明抛出异常 10.5.2 使用throw语句抛出异常
try { int z = 100 / 0;
} catch (Exception ex) { ex.printStackTrace(); System.out.println(ex.getMessage()); System.out.println(ex.getLocalizedMessage()); System.out.println(ex.toString());
方法 IOException SQLException classnotfoundexception NoSuchFieldException NoSuchMethodException
第十二章 异常处理
捕获异常
catch子句由三部分组成:关键字catch,圆括号中的异常声 明以及复合语句中的一组语句. * 注意这不是函数,所以圆括 号中不是形参,而是一个异常类型声明,可以是类型也可以是 对象. 异常声明中也可以是一个对象声明.以栈为例.当栈满时, 要求在异常对象中保存不能被压入到栈中的值,这时, pushOnFull类可定义如下: template <class T> class pushOnFull { T val; public: pushOnFull(T i) { val = i; } T value() { return _value; } }; 新的私有数据成员 val 保存那些不能被压入栈中的值.该值即调 用构造函数时的实参.
异常处理的详细处理流程
(4)如果匹配的处理器未找到,则运行函数terminate将被自动
调用,而函数terminate的默认功能是调用abort终止程序. (5)如果找到了一个匹配的catch处理程序,且它通过值进行捕 获,则其形参通过拷贝异常对象进行初始化.如果它通过 引用进行捕获,则参量初始化为指向异常对象. 注意:catch处理程序的出现顺序很重要,因为在一个try 块中,异常处理程序是按照它出现的顺序被检查的.
捕获异常
对应在throw表达式中,构造抛出对象也要有实参: throw pushOnFull(data); //data即Push(const &data)中的参数data 这样在catch子句中,要取得 val,须调用pushOnFull中的成员 函数value(): catch(pushOnFull<T> eObj){ cerr<<"栈满"<<eObj.value()<<"未压入栈"<<endl; return 1; } 在catch子句的异常声明中声明了对象eObj,用它来调用 pushOnFull类的对象成员函数value().异常对象是在抛出点被 创建,与catch子句是否显式要求创建一个异常对象无关,该 对象总是存在,在catch子句中只是为了调用异常处理对象的 成员函数才声明为对象,不用类.
java异常处理
Try与 Try与catch
try
捕获违例的第一步是用try{… 捕获违例的第一步是用 try{…} 语句块选定捕 获违例的范围。 获违例的范围。 catch 在catch语句块中是对违例对象进行处理 catch语句块中是对违例对象进行处理 的代码
每个try 语句块可以伴随一个或多个catch 语句, 每个 try语句块可以伴随一个或多个 catch语句 , 用 于处理可能产生的不同类型的违例对象。 于处理可能产生的不同类型的违例对象 。 与其它 对象一样, 对象一样 , 可以访问一个违例对象的成员变量或 调用它的方法。 调用它的方法。 getMessage( ) 方法,用来得到有关异常事件的信 方法, 息 printStackTrace( )用来跟踪异常事件发生时执行 堆栈的内容。 堆栈的内容。
IOExeption
从一个不存在的文件中读取数据 越过文件结尾继续读取 连接一个不存在的URL 连接一个不存在的URL
5
Java当中的异常处理机制 Java当中的异常处理机制
异常是一个对象,必须是某个异常类的实 例,这个异常必须是已经定义好的。 例,这个异常必须是已经定义好的。 Java类库中已经存在了许多异常类,每种异 Java类库中已经存在了许多异常类,每种异 常类对应着某一种或者某一类错误,类中 包含着错误的相关信息和处理方法。 如果程序发生错误的当前结构中没有处理 如果程序发生错误的当前结构中没有处理 此异常的机制,那么它将移交给外层结构 处理,如果还不行,就继续上交,直到操 处理,如果还不行,就继续上交,直到操 作系统,操作系统就会终止程序的运行。
17
异常使用中的两个问题(1) 异常使用中的两个问题(
异常的匹配:异常的控制过程与swich相似, 异常的匹配:异常的控制过程与swich相似, 但有本质区别
第12章 错误和异常处理-Python程序设计-黄蔚-清华大学出版社
except:
print(22)
else:
print(3)
3. try语句中的finally子句
• 格式 try: 被检测的语句块 finally: 语句块
无论是否发生异常都 将执行finally后的语
句块
例12-5 修改例12-4,增加finally子句
a = 12 # 确实b的赋值语句 # 会引发第一个except子句 # b = 0 # 会引发第一个except子句 # b = 'abc' # 会引发第二个except子句 # b = 2 # 会引发else子句 try:
12.2.2 try-except语句
• 当Python程序发生错误时,可以使用try-except语句捕获异常 • 若不使用try-except语句,程序将终止执行 1. 最简形式的异常处理
try: 被检测的语句块
except: 异常处理语句块
例12-3 利用try语句判断输入数据的类型
import sys x = input('请输入一个整数:') try:
dic['age']
# 出错提示会提示本行出错,但可能需要在上一行修改。
# AttributeError
class Foo:pass
Foo.x
# ZeroDivisionError:无法完成计算
res1=1/0
res2=1+'str'
运行时错误的出错提示
3. 逻辑错误
• 能够执行并会得到运行结果,只是运行结果是错误的或不是编 程者预期的结果
第12章 错误和异常处理
目录
• 12.1 程序的错误 • 12.2 异常处理 • 12.3 断言处理 • 12.4 Python的调试工具pdb*
第12章 异常处理
第12章 Java例外处理
12.1 异常的基本概念 12.2 异常的处理机制 12.3 异常类的类层次
第12章 Java例外处理
12.1 异常的基本概念
异常(Exception)是程序执行过程中出 现的非正常事件,即各种意外情况。比如说: ① 用户输入出错 ② 所需文件找不到 ③ 运行时磁盘空间不够 ④ 内存不够 ⑤ 算术运算错 (数的溢出,被零除…) ⑥ 数组下标越界 ……
第12章 Java例外处理
12.3 异常类的类层次
Java语言采用继承的方式组织各种异常, 所有的异常类都直接或间接地继承于类 Throwable。我们可用图12.1描述异常的常 用类层次。 从图12.1中可以看出,Throwable类是 所有异常类的父类。它分为两个子类:Error 类和Exception类。Error类包括动态链接失 败、虚拟机出错等异常,该类异常Java不要 求捕获,同时系统也不会抛出该类异常。
第12章 Java例外处理
区分RuntimeException和非 RuntimeException的规则是: 编程错误导致RuntimeException,如 被零除、数组越界访问、空指针访问等;而其 他异常则是由于意外情况而发生的,如试图读 取文件结尾以后的数据、试图打开错误的URL、 试图根据并不代表已存在类的字符串来查找 Class对象等。
第12章 Java例外处理
当我们对其编译后运行时,其对应的结果如下: c:\java\bin>java ExceptionDemo
The result is10 Exception in thread "main" ng.Arithmetic Exception: / by zero at Exception Demo.main(Exception Demo.java:5)
异常处理PPT课件
这类异常并非因设计或实现引起,是无法避免的。 但一般情况下,程序员应该提供相应的代码捕捉和 处理。
14
受检查的异常和不受检查的异常: 受检查的异常
Exception类及其非RuntimeException子类属于受 检查的异常;
9) System.out.println("After method.");
10) } 11) }
6
Exception in thread "main" ng.ArithmeticException: / by zero at ExceptionDivideBy0.method(ExceptionDivideBy0.java:4) at ExceptionDivideBy0.main(ExceptionDivideBy0.java:8)
一般情况下,程序员可不必理会这类异常,它们 虽然很严重,但很少发生。
12
(2) RuntimeException类及其子类: 表示设计或实现 方面的问题,例如:
● ArithmeticException(算术运算异常): 算术运算时发生 的异常情况,如整数相除,除数为零。 ● ClassCastException(强制类型转换异常): 把一个对象 引用转换成一个不合适的类型,如把一个对象引用转换成某 个子类类型。 ● NullPointerException(空引用异常): 需要对象引用时使 用了一个null引用。 ● ArrayIndexOutOfBoundsException(数组下标越界异常): 下标值超出了数组大小。 ● NumberFormatException(数字格式异常): 试图将非数 字格式字符串转换成数值。
第13章异常(精)
第13章异常异常处理: 在程序设计阶段就能充分考虑到各种意外情况,从而当环境条件出现意外或用户使用操作不当的情况下, 程序能够给出恰当的处理。
使软件具有具有容错能力。
13.1异常处理的基本思想1、问题:发现错误的函数往往不具备处理错误的能力。
2、C十十的异常处理机制:●由发现错误的函数引发一个异常;●它的调用者能够捕获这个异常;●如果它的调用者能够处理这个错误,则处理之。
●否则,继续传递给上级调用者去处理;上传过程称为传播。
●这种传播会一直继续到异常被处理为止。
●如果程序始终没有处理这个异常,最终它会被传到C十十运行系统那里,运行系统捕获异常后通常只是简单地终止这个程序异常的传播方向:见下图13.2 C++异常处理的实现对处理异常情况的内部支持:try:发现异常throw:抛出异常catch:捕捉异常13.2.1 异常处理的语法1、try块语法:形式:try复合句//即:块语句作用:设置代码的保护段。
即:如果预料某段程序代码(或对一某个函数的调用)有可能发生异常,就将它放在try子句之后。
以便异常产生时能够被发现。
2、throw表达式语法;形式:throw 表达式作用:将异常抛出给调用者。
注意;如果有多处要抛掷异常,应该用不同的操作数类型来互相区别,操作数的值不能用来区别不同的异常。
3、catch块语法:形式:catch(异常类型1声明)复合句//即:块语句catch(异常类型2声明)复合句…作用:捕获由throw表达式抛出的异常。
并提交给异常类型匹配的复合语句进行异常处理。
4、异常处理的执行过程如下:①控制通过正常的顺序执行到达try语句,然后执行try块内的保护段。
②如果在保护段执行期问没有引起异常,那么跟在try块后的catch子句就不执行,程序从异常被抛掷的try块后跟随的最后一个catch子句后面的语句继续执行下去。
③如果在保护段执行期间或在保护段调用的任何函数中(直接或间接的调用)有异常被抛掷,则从通过throw操作数创建的对象中创建一个异常对象。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
c++的异常处理允许程序以结构化和顺序化的方 式处理反常和意外的情况。
00:27
3/30
面向对象程序设计(C++描述)
找到一个匹配的catch异常处理后: 初始化参数。 将从对应的try块开始到异常被抛掷 处之间构造(且尚未析构)的,所 有自动对象进行析构。 从最后一个catch处理之后开始恢复 执行。
00:27
17/30
面向对象程序设计(C++描述)
例2 异常处理时的析构(重点掌握)
#include <iostream> void MyFunc( void ); class Expt { //自编的异常处理类 public:
throw y;
that is ok.
return x / y;
}00:27
10/30
面向对象程序设计(C++描述)
异常的重新抛出
如果异常处理程序捕获到异常后,无法确定异常的 处理方式,须再抛出传递。这些工作通过加入不带 参数的throw就可完成: catch( . . . ) { cout << "an exception was thrown " << endl; throw; }
} cout << "结束"; }
00:27
26/30
面向对象程序设计(C++描述)
布置作业(续)
2、分析以下代码,写出运行结果,并与题1对比分析运行结果。
using namespace std;
int main( ) {
cout << "开始" << endl;
try {
cout << "进入try块" << endl;
异常处理的基本思想
将异常检测与处理分离,出现异常的函数不需 具备处理异常的能力。
当一个函数发生异常时,它抛出一个异常,调 用者捕获并处理该异常。若调用者不能处理, 还可抛出给上一级调用者处理,直至运行系统。 若仍不能处理,将简单终止程序。
00:27
4/30
面向对象程序设计(C++描述)
异常处理的基本思想
00:27
29/30
面向对象程序设计(C++描述)
布置作业(续)
5、练习使用try、catch语句,在程序中用new分配内 存时,如果操作未成功,则用try语句触发一个char类 型异常,用catch语句捕获此异常。声明char *ptr[10];, 为该数组的每个元素分配1000000000字节的内存。 6(思考题,选做)、编写一个简单的异常处理类 CDivideByZeroException,其中提供异常处理信息。 在主函数中用try检测除数为0的异常情况,然后在除法 运算函数quotient()中用throw抛出异常,最后用catch 捕捉并处理除数为0的异常。
int Div( int x, int y);
int main( ) {
try {
cout << "5/2 = " << Div(5,2) << endl;
cout << "8/0 = " << Div(8,0) << endl;
cout << "7/1 = " << Div(7,1) << endl;
}
catch( int ) {
cout << "except of deviding zero.\n";
}
cout << "that is ok.\n"; } int Div( int x, int y ) {
if(y == 0)
程序运行结果如下: 5/2 = 2 except of deviding zero.
int main( ) {
CD derived;
try { throw derived; }
catch( CB b ) {
cout << "Catch a base class: ";
b.print();
}
catch( CD d ) {
cout << "Catch a Derived class";
7/30
面向对象程序设计(C++描述)
异常处理语法(抛出异常)
try 块 try { // 需保护的测试块 }
throw语句 throw 表达式;
// 表达式可以是任意类型的对象 // throw语句必须在try块、catch块或其调用的函数中执行
ห้องสมุดไป่ตู้00:27
8/30
面向对象程序设计(C++描述)
1 异常处理的基本思想
2 C++异常处理的实现
3 异常处理中的构造与析构
4 异常规格说明
5 异常是错误的事件或运行期间发生的反常,有两种类型:
同步异常,在运行期间产生并可使用throw抛出
异步异常,由硬件或运行环境引起的异步错误
6 异常处理是c++一个特性,它支持以一种标准的方式处理 错误,即通过关键字throw, try, catch实现。
d.print();
}
00:27
}
28/30
面向对象程序设计(C++描述)
布置作业(续)
4、分析以下程序的执行结果,并说明原因。 using namespace std; void ExFun( ) {
try { throw "Welcome"; } catch( char * ) {
cout << "Catch inside ExFun" << endl; throw; } } int main( ) { try { ExFun( ); } catch( char * ) { cout << "Catch inside Main" << endl; } }
cout << "在try块中,调用MyFunc( )。" << endl;
MyFunc( ); }
00:27
20/30
面向对象程序设计(C++描述)
catch( Expt E ) { cout << "在catch异常处理程序中。" << endl; cout << "捕获到Expt类型异常:"; cout << E.ShowReason( ) << endl;
Expt( ) { }; ~Expt( ) { }; const char* ShowReason( ) const {
return "Expt类异常。"; } };
00:27
18/30
面向对象程序设计(C++描述)
class Demo { public:
Demo( ); ~Demo( ); }; Demo::Demo( ) { cout << "构造 Demo。" << endl; } Demo::~Demo( ) { cout << "析构 Demo。" << endl; }
异常处理语法(捕获异常)
catch块 catch ( 类型 参数) //类型为基本数据类型或类类型 { // 异常处理语句块 } catch( … ) // 可捕获处理任意类型的异常 { // 异常处理语句块 }
00:27
9/30
例1 处理除零异常 面向对象程序设计(C++描述)
#include <iostream>
using namespace std;
class CB {
public:
void print(){ cout << "Catch the class CB" << endl; }
};
class CD: public CB {
public: void print( ) { cout << "Catch the class CD" << endl; } };
00:27
19/30
面向对象程序设计(C++描述)
void MyFunc( ) { Demo D; cout << "在MyFunc( )中抛掷Expt类异常。" << endl; throw Expt( ); //构建异常对象,并抛出
} int main( ) {
cout << "在main函数中。" << endl; try {
面向对象程序设计(C++描述)
异常处理
面向对象程序设计(C++描述)
本章主要内容
异常处理的基本思想
C++异常处理的实现
抛出异常throw 捕获异常try,catch