《Java程序设计项目化教程》课件_第5章

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

5.2.1 异常able类或子类,而
Throwable类又直接继承于Object类。Throwable类有两个子 类:java.1ang.Error类与java.1ang.Exception类。Exception类 又进一步细分为RuntimeException(运行异常)类和NonRuntimeException(非运行异常)类。图5-2显示了各异常之间 的继承关系。
表5-2 常见运行时异常类
异常类 ArithmeticException IndexOutOfBoundsException ArrayIndexOutOfBoundsException StringIndexOutOfBoundsException ClassCaseException
NullpointerException
用途 除数为零的异常 下标越界异常 访问数组元素的下标越界异常 字符串下标越界异常 类强制转换异常 当程序试图访问一个空数组中的元素,或访 问一个空对象中的方法或变量时产生的异常
2) 非运行时异常 非运行时异常是由编译器在编译时检测是否会发生在方 法的执行过程中的异常。对于非运行时的异常类,即使通过 仔细编程也无法避免。例如,要访问的文件不存在等情况。 这类异常通常都在JDK说明文档中定义的方法后面通过 throws关键字将异常抛出,编程时必须捕获并做相应处理。 如图5-3所示,java.io.Reader类中定义了read方法: public int read(CharBuffer target) throws IOException 在编程中,若要使用read方法,则必须对其可能产生的 IOException异常进行捕获和相应的处理。
例5-1的程序中没有任何异常处理的相关代码,编译时 能顺利通过,但运行时屏幕显示如图5-1所示的界面,并中 断程序的运行。
例5-1 TestException.java 1 class TestException1{ 2 public static void main(String args[]){ 3 int a=8,b=0; 4 int c=a/b; //除数为0,出现异常 5 System.out.print(c); 6} 7}
异常类名 LinkageError VirtualMachineError
AWTError
用途 动态链接失败 虚拟机错误
AWT 错误
3.Exception类及其子类 相对于Error类,Exception类包含了一般性的异常,这 些异常通常在捕捉到之后可以做一些妥善的处理,以确保程 序继续运行。从异常类的继承层次结构图中可以看出, Exception类的若干子类中包含运行时异常类(Runtime Exception)和非运行时异常类。
图5-1 运行时错误提示
程序出错原因是因为除数为0。Java发现这个错误之后, 便由系统抛出 “ArithmeticException”这个类的异常,用来 说明错误的原因,以及出错的位置是在TestException1. java 程序中的第4行,并停止运行程序。因此,如果没有编写处 理异常的程序代码,则Java的默认异常处理机制会先抛出异 常,然后终止程序运行。
上例中出现的异常比较简单,在编程中完全可以避免, 但是有的异常在程序的编写过程中是无法预知的。例如,要 访问的文件不存在,网络连接的过程中发生中断等。为了处 理程序运行中一些无法避免的异常,Java语言提供了异常处 理机制,为方法的异常终止和出错处理提供了清楚的接口, 同时将功能代码和异常处理的代码进行分开编写。
图5-2 异常类的层次结构
2.Error类及其子类 Error类专门用来处理严重影响程序运行的错误,一般 情况下我们不会设计程序代码去捕捉这种错误,其原因在于 即使捕捉到它,也无法给予适当的处理。例如,虚拟机错误、 动态链接失败等。表5-1列出一些常见的Error类。
表5-1 常见的Error类
在不支持异常处理的传统程序设计语言中,设计的程序 要包含很长的代码来识别潜在的运行错误的条件。传统的检 测错误的方法包括使用一些可以设置为真或假的变量来对错 误进行捕获,相似的错误条件必须在每个程序中分别处理, 这显然麻烦而且低效。例如在C语言中,通过使用if语句来 判断是否出现了错误,同时,要调用函数并通过被调用函数 的返回值感知在被调用函数中产生的错误事件并进行处理。 这种错误处理机制会导致把大部分精力花在出错处理上;且 只把能够想到的错误考虑到,对其他情况无法处理;程序可 读性也很差,大量的错误处理代码混杂在程序中;出错返回 信息量太少,无法更确切地了解错误状况或原因。
1) 运行时异常 运行异常是在Java运行系统执行过程中的异常,对于 RuntimeException类的异常,即使不编写异常处理的程序代 码,依然可以编译成功,因为该异常是在程序运行时才有可 能发生的,例如算术异常(除数为0)、数组下标越界等。由 于这类异常产生得比较频繁,并且通过仔细编程完全可以避 免。如果显式地通过异常处理机制去处理,则会影响整个程 序的运行效率。因此,对于RuntimeException类,一般由系 统自动检测,并将它们交给缺省的异常处理程序。表5-2列 出几种常见的运行时异常类。
第5章 任务5——定义用户年龄的异常类
5.1 任务描述 5.2 技术要点 5.3 任务实施
5.1 任 务 描 述
学生在线考试系统中,用户注册需要输入年龄,若输入 不合理的年龄,我们将在程序中抛出异常,并做相关处理。 为此,本章任务是自定义一个关于年龄的异常类。
5.2 技 术 要 点
在进行程序设计时,错误的产生是不可避免的,其中错 误包括语法错误和运行错误。一般称编译时被检测出来的错 误为语法错误,这种错误一旦产生程序将不被运行。然而, 并非所有错误都能在编译期间检测到,有些问题可能会在程 序运行时才暴露出来。例如,想打开的文件不存在、网络连 接中断、受控操作数超出预定范围、除数为0等。这类在程 序运行时代码序列中产生的出错情况称为运行错误。这种运 行错误倘若没有及时进行处理,可能会造成程序中断、数据 遗失乃至系统崩溃等问题。这种运行错误也就是我们常说的 “异常”。
相关文档
最新文档