Java程序设计 第6章 异 常 处 理.

Slides:



Advertisements
Similar presentations
7.1 内置对象概述及分类 JSP 视频教学课程. JSP2.2 目录 1. 内置对象简介 1. 内置对象简介 2. 内置对象分类 2. 内置对象分类 3. 内置对象按功能区分 3. 内置对象按功能区分 4. 内置对象作用范围 4. 内置对象作用范围.
Advertisements

第 7 章 异常处理. 立体化教材计算机系列 — 《 Java 程序设计》 2 目 录 重点与难点点拨 经典练习题 异常处理机制 异常.
面向侧面的程序设计 方林博士 本文下载地址:
10.2 立方根.
Exception子类的继承关系 Exception ClassNotFoundException
Oracle数据库 Oracle 子程序.
全国计算机等级考试 二级基础知识 第二章 程序设计基础.
在PHP和MYSQL中实现完美的中文显示
第10讲 Java面向对象编程基础(4) 教学目标 主要内容.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
Hadoop I/O By ShiChaojie.
Java基础 JavaSE异常.
第七章 异常.
抽象类/接口 与异常处理机制 主讲:赖国荣 QQ:
EBNF 请用扩展的 BNF 描述 C语言里语句的结构; 请用扩展的 BNF 描述 C++语言里类声明的结构;
第二讲 搭建Java Web开发环境 主讲人:孙娜
学习前的准备工作 讲师:burning.
欢乐玩转单元测试之JUnit 讲师:FREE QQ:
第 14 章 例外處理.
Java语言程序设计 第五部分 Java异常处理.
第6章 异常的捕获及处理 6.1 异常简介 6.2 异常类的继承结构 6.3 异常处理机制 6.4 异常处理 6.5 本章小结.
第14讲 异常处理 1/.
走进编程 程序的顺序结构(二).
辅导课程六.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第5章 异常处理 王德俊 上海交通大学继续教育学院.
单元测试工具XUnit 任课老师:黄武 下午2时20分 25.
异常及处理.
动态规划(Dynamic Programming)
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
程序设计工具实习 Software Program Tool
SOA – Experiment 2: Query Classification Web Service
第一章 函数与极限.
第4章 PHP流程控制语句.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言程序设计 主讲教师:陆幼利.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
$9 泛型基础.
第7章 异常处理.
第二章 Java基本语法 讲师:复凡.
Aspect Oriented Programming
分裂对象模型 C++ otcl.
第12章 异常处理 C++自身有着非常强的纠错能力,发展到如今,已经建立了比较完善的异常处理机制. C++的异常情况无非两种,一种是语法错误,即程序中出现了错误的语句、函数结构和类,致使编译程序无法进行。另一种是运行时发生的错误,一般与算法有关。 关于语法错误, C++编译器的报错机制可以让我们轻松地解决这些错误;
实验七 安全FTP服务器实验 2019/4/28.
第4章 Excel电子表格制作软件 4.4 函数(一).
Chapter 18 使用GRASP的对象设计示例.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
魏新宇 MATLAB/Simulink 与控制系统仿真 魏新宇
辅导课程十五.
第二章 Java基本语法 讲师:复凡.
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Java程序设计 第17章 异常和断言.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
WSAAsyncSelect 模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang
MFC的六大核心 机制 命令传递 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
3.7 Java的异常处理机制.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
第6章 异常处理 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
本节内容 如何调试驱动程序? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第四章 UNIX文件系统.
第十七讲 密码执行(1).
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
第1章 C++程序设计基础 网络游戏开发-C++程序设计.
Presentation transcript:

Java程序设计 第6章 异 常 处 理

6.1 异常处理 6.1.1 异常的概念 异常(Exception)又称为例外、差错、违例等,是特殊的运行错误对象,对应着Java语言特定的运行错误处理机制。 在一些传统的语言(如C语言中),通过使用if语句来判断是否出现了例外,同时,调用函数通过被调用函数的返回值感知在被调用函数中产生的例外事件并进行处理。全程变量ErrNo常常用来反映一个异常事件的类型。但是,这种错误处理机制会导致不少问题,如: (1) 正常处理程序与异常处理程序的代码同样地处理,程序的可读性大幅度降低; (2) 每次调用一个方法时都进行全面、细致的错误检查,程序的可维护性大大降低; (3) 由谁来处理错误的职责不清,以致于造成大量的潜伏的问题,等等。 为了解决这些问题,Java通过面向对象的方法来处理异常。

在一个方法的运行过程中,如果发生了异常,则这个方法生成代表该异常的一个对象,并把它交给运行时系统,运行时系统寻找相应的代码来处理这一异常。我们把生成异常对象并把它提交给运行时系统的过程称为抛出(throw)异常。运行时系统在方法的调用栈中查找,从生成异常的方法开始进行回溯,直到找到包含相应异常处理的方法为止,这一个过程称为捕获(catch)一个异常。 Java的这种机制的另一项好处就是能够简化错误控制代码。

Throwable与Exception Java中定义了很多异常类,每个异常类都代表了一种运行错误,类中包含了该运行错误的信息和处理错误的方法等内容。Java的异常类都是java.lang.Throwable的子类。它派生了两个子类:Error(错误)和Exception(违例)。其中Error类,由系统保留;而Exception类则供应用程序使用。其中: Error:JVM系统内部错误、资源耗尽等严重情况,由系统保留; Exception:其他因编程错误或偶然的外在因素导致的一般性问题,例如:对负数开平方根;空指针访问;试图读取不存在的文件网络连接中断。 一般所说的异常,都是指Exception及其子类。因为,应用程序不处理Error类。 同其他的类一样,Exception类有自己的方法和属性。它的构造函数有两个:  public Exception();  public Exception(String s);

6.1.2 捕获和处理异常 Java中的异常处理机制可以概括成以下几个步骤。 6.1.2 捕获和处理异常 Java中的异常处理机制可以概括成以下几个步骤。 (1)Java程序的执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出异常。抛出异常也可以由程序来强制进行。 (2)当Java在运行时系统接收到异常对象,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。 (3)如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。

抛出异常 捕获异常 throw异常对象; 语句组 }catch(异常类名 异常形式参数名){ 异常处理语句组; }finally{ } try{ 语句组 }catch(异常类名 异常形式参数名){ 异常处理语句组; }finally{ } 其中,catch语句可以有一个或多个,而且至少要有一个catch语句或finally语句

受检的异常 Exception类及其子对触,如果不是RuntimeException及其子对象,称为受检的异常(checked Exception),编译程序要求用户明确进行语法处理,即要么捕(catch),要么抛(throws)

多异常的处理 finally语句 在覆盖的方法中声明异常 由于异常对象与catch块的匹配是按照catch块的先后排列顺序进行的,所以在处理多异常时应注意认真设计各catch块的排列顺序。 子类异常要排在父类异常的前面 finally语句 在覆盖的方法中声明异常 在子类中,如果要覆盖父类的一个方法,若父类中的方法声明了throws异常,则子类的方法也可以throws异常 但不能抛出更一般的异常

6.2 创建用户自定义异常类 创建用户自定义异常时,一般需要完成如下的工作。 6.2 创建用户自定义异常类 创建用户自定义异常时,一般需要完成如下的工作。 (1) 声明一个新的异常类,使之以Exception类或其他某个已经存在的系统异常类或 用户异常类为父类。 (2) 为新的异常类定义属性和方法,或重载父类的属性和方法,使这些属性和方法能 够体现该类所对应的错误的信息。 例Exce6.java 用户定义的异常类

6.2.2 重抛异常及异常链接 对于异常,不仅要进行捕获处理,有时候还需要将此异常进一步传递给调用者,以便让调用者也能感受到这种异常。这时可以在catch语句块或finally语句块中采取以下三种方式: (1)将当前捕获的异常再次抛出。格式如下: throw e; (2)重新生成一个异常,并抛出,如: throw new Exception("some message"); (3)重新生成并抛出一个新异常,该异常中包含了当前异常的信息,如: throw new Exception("some message",e); 例:ExceptionCause.java

6.3 断言及程序的测试 6.3.1 使用assert assert的格式是: 6.3 断言及程序的测试 6.3.1 使用assert assert的格式是: assert 表达式; assert 表达式 : 信息; 在调试程序时,如果条件表达式不为true,则程序会产生异常,并输出相关的错误信息。 要注意的是,只有在JDK1.4及以上的版本中才可以使用断言。具体地说,在编译时,要通过-source选项来指明版本,如: javac -deprecation -source 1.4 -classpath . Assertion.java 在运行时,要使assert起作用,则在运行时,使用选项(-ea,即-enableassertions)。如: java -ea -classpath . Assertion

6.3.2 程序的测试及JUnit 在实际开发过程中,程序的修改是经常要进行的过程,例如实现某个功能原先有一个算法,后来又找到一个新的算法,在新的算法实现时,必须保证程序在修改后其结果仍然是正确的。在现代的开发过程中,一种重要的措施是使用测试。也就是说,在编写程序代码的同时,还编写测试代码来判断这些程序是否正确。有人更进一步地把这个过程称为“测试驱动”的开发过程。编写测试代码,表面上增加了代码量,但实际上,由于它保证了它在单元级别的正确性,从而保证了代码的质量,减少了后期的查错与调试的时间,所以实际上它提高了程序的开发效率。

在Java的测试过程,经常使用JUnit框架,它是一个开放源代码产品,它支持测试开发,并提供运行这些测试的环境。有关 JUnit 的详细信息,请参见http://www.junit.org。 以NetBeans IDE为例。要生成一个JUnit测试项目,只需要选择“工具”菜单中的“JUnit”“创建测试项目”即可。

为了运行测试,可以选择“运行”菜单中的“测试”,或者直接按Alt+F6即可。 在测试中常用的语句如下: fail( 信息 ); //表示程序出错 assertEqaul(参数1,参数2 ); //表示程序要保证两个参数要相等 assertNull(参数); //表示参数要为null 从以上语句可以看来,在一定意义上JUnit是对assert语句的极大的扩充,并提供了一个完整的单元测试框架。