第七章异常处理

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

Error类及其常见子类的层次关系
AssertionError Error VirtualMachineError StackOverflowError
LinkageError
NoClassDefFoundError ExceptionInitializerError
图7-1 Error类及其子类的层次
安庆师范学院计算机与信息学院 ·Java程序设计 · www.aqtc.edu.cn
引言
在进行程序设计时,错误的产生是不可避免的,如何处理错误?把错 误交给谁去处理?程序又该如何从错误中恢复?这是任何程序设计语言都 要解决的问题。
以面向过程语言-C语言为例,一般通过使用if语句来判断是否出现 了错误,同时,调用函数通过被调用函数的返回值感知在被调用函数中产 生的错误事件并进行处理。 没有错误处理的程序:
Error类: 指较少发生的内部系统错误,由JVM生成并抛出,包 括动态链接失败、JVM内部错误、资源耗尽等严重情况,程序员 无能为力,只能让程序终止。 Exception类: 解决由程序本身及环境所产生的异常,有补救 或控制的可能,程序员也可预先防范。
安庆师范学院计算机与信息学院 ·Java程序设计 · www.aqtc.edu.cn
图7-2 Exception类及其子类的层次
StringIndexOutOfBoundsException
安庆师范学院计算机与信息学院 ·Java程序设计 · www.aqtc.edu.cn
Exception类的子类
一般又可分为两种类型:运行时异常和非运行时异常。 (1)运行时异常:RuntimeException类及其子类代表 的异常称为运行时异常。运行时异常是在程序运行时检测到 的,可能发生在程序的任何部位且数量较大,因此编译器不 对运行时异常(包括Error类的子类)处理,这种异常又称 为免检异常。 程序运行时发生这种异常时运行时系统会把异常对象交 给默认的异常处理程序,在标准输出上显示异常的内容及发 生异常的位置。 程序7.1中的异常NullPointerException就是运行时异常。
安庆师范学院计算机与信息学院 ·Java程序设计 · www.aqtc.edu.cn
7.1.1 程序错误与异常的概念
一般来说,语法错误容易发现和纠正,因为编译器会指出错 误位置和原因。逻辑错误需要程序员使用各种调试方法检测,不 属于这里的讨论范畴,这里主要讨论运行时错误,即异常。
安庆师范学院计算机与信息学院 ·Java程序设计 · www.aqtc.edu.cn
• 编译不会发生错误,可以生成NullPointerDemo.class字节码
文件,但运行时结果如下: Exception in thread "main" java.lang.NullPointerException at NullPointerDemo.main (NullPointerDemo.java:4)
安庆师范学院计算机与信息学院 ·Java程序设计 · www.aqtc.edu.cn
2. Exception类
NoSuchMethodException ClassNotFoundException Exception IOException RuntimeException FileNotFoundException
第7章 异常处理与断言
7.1 异常与异常类 7.2 异常处理机制
7.3 自定义异常类
7.4 断言机制
安庆师范学院计算机与信息学院 ·Java程序设计 · www.aqtc.edu.cn
7.1 异常与异常类
7.1.1 程序错误与异常的概念 7.1.2 Throwable类及其子类
7.1.1 程序错误与异常的概念
1. 编程错误 一般来说错误可以分成3种类型:语法错误、逻辑错误 和运行时错误。 语法错误是指编写的代码不符合Java的语法标准。 这种错误往往是由于编程人员的粗心大意所造成的。 在Java程序中,只有不存在任何语法错误,程序才 能被编译成类文件。
安庆师范学院计算机与信息学院 ·Java程序设计 · www.aqtc.edu.cn
安庆师范学院计算机与信息学院 ·Java程序设计 · www.aqtc.edu.cn
几种常见的运行时异常
ArrayIndexOutOfBoundsException(数组下标越界异常) 当引用数组元素的下标超出范围时产生的异常。 NumberFormatException(数字格式错误异常) 在将字符 串转换为数值时,如果字符串不能正确转换成数值则产生该异常, 例如:
安庆师范学院计算机与信息学院 ·Java程序设计 · www.aqtc.edu.cn
程序7.2 InputChar.java
import java.io.*; public class InputChar{ public static void main(String[] args){ System.out.print("Input a char:"); char c=(char)System.in.read(); System.out.println(" c = " + c); } } •
编译该程序时会出现下列编译错误: D:\study>javac InputChar.java InputChar.java:6:未报告的异常java.io.IOExceptiom;必须对其进行捕捉或声明 以便抛出 char c=(char)System.in.read(); ^ 1 错误
安庆师范学院计算机与信息学院 ·Java程序设计 · www.aqtc.edu.cn
String toString():返回形如 “classname”@“getMessage()”的信息 。
String getMessage() : 返回有关异常事件的信息。
String getLocalizedMessage()
void printStackTrace():用来跟踪异常事件发生时的执行堆 栈的内容 void printStackTrace(PrintStream s) void printStackTrace(PrintWriter s) Throwable fillInStackTrace()
Throwable类及其子类类图
Object
Throwable
Error
Exception
RuntimeException
IOException
安庆师范学院计算机与信息学院 ·Java程序设计 · www.aqtc.edu.cn

Throwable类:具体请参考帮助文档。
构造方法: Throwable() 构造方法: Throwable(String message)
安庆师范学院计算机与信息学院 ·Java程序设计 · www.aqtc.edu.cn
Hale Waihona Puke Baidu
程序7.1 NullPointerDemo.java
public class NullPointerDemo { public static void main(String[] args){ String str = null; System.out.println(str.length()); System.out.println("Program finished."); } }
2. 什么是异常
异常(Exception)是指程序运行过程中出现的可能发生会 打断程序正常执行的事件或现象,例如用户输入错误、除数为零、 需要处理的文件不存在、数组下标越界、内存不足等。 为了加强程序的鲁棒性(Robust),程序设计时,必须考虑 到可能发生的异常(Abnormal)事件并做出相应的处理。 Java提供了功能强大的面向对象异常处理机制,可以方便地 在程序中监视可能发生异常的程序块,并将所有异常处理的代码 集中放置在程序某处,使完成正常功能的程序代码与进行异常处 理的程序代码分开,便于程序的阅读、修改和维护。 以上的意思你能明白吗?
openTheFile; determine its size; allocate that much memory; read-File; closeTheFile; }catch(fileopenFailed){ dosomething; }catch(sizeDetermineFailed){ dosomething; }catch(memoryAllocateFailed){ dosomething; }catch(readFailed){ dosomething; }catch(fileCloseFailed){ dosomething; }finally{ dosomething; } 安庆师范学院计算机与信息学院 ·Java程序设计 · www.aqtc.edu.cn
{
openTheFile; determine its size; allocate that much memory; read-file closeTheFile; }
安庆师范学院计算机与信息学院 ·Java程序设计 · www.aqtc.edu.cn
引言
面向过程和面向对象异常处理机制对比
try {
7.1.1 程序错误与异常的概念
逻辑错误是指程序在设计时存在的缺陷,或者说程序虽然能 够正常运行,但其运行结果不是设计程序的人所期望的那样。 因为程序通过了编译,而且能够正常运行,因此逻辑错误 一般很难发现。
运行时错误也称为运行时异常。如果程序能够通过编译,但 在运行时也可能抛出异常或意外终止,此时说明程序中存在运行 时错误。
安庆师范学院计算机与信息学院 ·Java程序设计 · www.aqtc.edu.cn
几种常见的运行时异常
NullPointerException (空指针异常) 当某个对象的 引用为null时调用该对象的方法或使用对象时就会产生该异 常。 ArithmeticException(算术异常) 在做整数的除法或 整数求余运算时可能产生的异常,它是在除数为零时产生的 异常。 注意:浮点数运算不会产生该类异常。如,1.0/0.0的 结果为Infinity。 ClassCastException(类转换异常) Java支持运行时 多态,即可以将一个对象从一个类型转换成另一个类型,若 不符合转换的规定,则产生类转换异常。
7.1.2 Throwable类及其子类
Java异常都是Throwable类的子类对象,Throwable类是 Object类的直接子类,它定义在java.lang包中。 Throwable类有两个子类,一个是Error类,另一个是 Exception类,这两个子类又分别有若干个子类。
在Java中将异常情况分为Error 和Exception两大类。
安庆师范学院计算机与信息学院 ·Java程序设计 · www.aqtc.edu.cn
1. Error类
Error类描述的是系统内部错误,这样的错误很少出现。如果 发生了这类错误,则除了通知用户及终止程序外,几乎什么也不 能做,程序中一般不对这类错误处理。
安庆师范学院计算机与信息学院 ·Java程序设计 · www.aqtc.edu.cn
openFiles; if (theFilesOpen){ determine the length of the file; if (gotTheFileLength) { allocate that much memory; if (gotEnoughMemory){ read the file into memory; if (readFailed) errorCode=-1; else errorCode = -2; } else errorCode=-3; }else errorCode=-4 ; }else errorCode=-5;
ArithmeticException ClassCastException NullPointerException IllegalArgumentException
NumberFormatException IndexOutOfBoundsException ArrayIndexOutOfBoundsException
相关文档
最新文档