第五章 Java的异常处理

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

运行过程中发生的非正常事件,它会中断指 令的正常执行,影响程序的正常运行。
异常对象
在Java语言中,我们用异常对象来表示不同
的异常。 所谓Java异常对象就是一个存放着相关错误 信息的对象,如果方法运行时产生了异常, 该方法就可以抛出一个异常对象 为了表示不同种类的异常,Java语言中定义 了许多异常类。
Error类
Error类表示Java运行时产生的系统内部错
误或资源耗尽等严重错误。 这种错误通常是程序无法控制和解决的,如 果发生这种错误,通常的做法是通知用户并 中止程序的执行。
典型的错误类
NoClassDefFoundError OutOfMemoryError VirtualMachineError 。。。。
当我们对其编译后运行时,其对应的结
果如下:
c:\jbuilder3\java\bin>java Exception Demo The result is10 Exception in thread "main" java.lang.Arithmetic Exception: / by zero at Exception Demo.main(Exception Demo.java:5)
5.2 异常处理机制
异常处理的一般步骤:
异常抛出异常捕获异常处理
异常处理机制
在Java程序的执行过程中,如果出现了异常
事件,就会生成一个异常对象。 生成的异常对象将传递给Java运行时系统, 这一异常的产生和提交过程称为抛出(throw) 异常。
异常处理机制
当Java运行时系统得到一个异常对象时,它

其意思是说,本程序执行到语句“System.out.println ("Divided by zero: "+x/0)”时,系统会抛出一个例外, 该例外在Java中定义为Arithmetic Exception (即属于 算术运算例外)。
5.1 什么是异常
异常(Exception)又称为例外,是指在程序
类 名 功能描述
IllegalAccessException
ClassNotFoundException CloneNotSupportException IOException InterruptedIOException
非法访问异常
指定类或接口不存在异常 对象使用clone方法而不实现cloneable接口 输入/输出异常 中断输入/输出操作异常
字符串下标越界错误
类型强制转换异常 数组的长度为负异常 非法使用空指针异常
NumberFormatException
IllegalArgumentException IllegalMonitorStateException IllegalThreadStateException EmptyStackException
methodA() main()

Java程序在执行的过程中,形成了一个先进后出的 调用堆栈,各方法之间依照调用先后的不同,由先 至后的进入调用堆栈,堆栈的最上层即是当前被调 用执行的方法。该方法执行完毕后,会将处理器控 制权交还给调用他的方法,依此类推。
方法调用堆栈中异常对象的传递
methodC()

表5.1 Java常见错误列表
类 名 ClassCircularityError ClassFormatError IllegalAccessError IncompatibleClassChan gError InternalError 功能描述 初始化某类检测到类的循环调用错误 非法类格式错误 非法访问错误 非兼容类更新错误 系统内部错误
例程
public class ExampleOfException { String[] lines = {"The first line", "The second line","The last line"}; The first line public static void main (String[] args) { The second line ExampleOfException eoe = new ExampleOfException(); The last line eoe.methodA(); Exception in thread "main" System.out.println("Program finished."); java.lang.ArrayIndexOutOfBoundsException: 3 } at ExampleOfException.methodC(ExampleOfException.java:16) void methodA() { at ExampleOfException.methodB(ExampleOfException.java:12) methodB(); at ExampleOfException.methodA(ExampleOfException.java:9) } at ExampleOfException.main(ExampleOfException.java:6) void methodB() { methodC(); } void methodC() { for (int i=0; i<4; i++) System.out.println (lines[i]); } }
InterruptedException EOFException FileNotFoundException
中断异常(常常应用于线程操作中) 输入流中遇到非正常的EOF标志 指定文件找不到
MalformedURLException
ProtocolException SocketException UnknownHostException UnknownServiceException UTFDataFormatException InstantiationException NoSuchMethodException

在Java语言中,任何的异常对象都是Throwable类的 直接子类或间接子类的实例。Java的类库已经提供 了一些常见的异常类,如果这些异常类不能够满足 要求,用户也可以创建自己的异常类。
LinkageError Error VirtualMachineError AWTError ArithmeticException
Throwable
.....
RuntimeException
IndexOutOfBounds.
InterruptedException
...
Exception IOException FileNotFoundException EOFException
AWTException
...
......
异常(Throwable)分类
将会寻找处理这一异常的代码。找到能够处 理这种类型的异常的方法后,运行时系统把 当前异常对象交给这个方法进行处理,这一 过程称为捕获(catch)异常。 如果Java运行时系统找不到可以捕获异常的 方法,则运行时系统将终止,相应的Java程 序也将退出。
方法的调用堆栈
methodC()
调 methBiblioteka BaidudB() 用
URL格式不正确
网络协议异常 Socket操作异常 给定的服务器地址无法解析 网络请求服务出错 UTF格式字符串转换出错 企图实例化接口或抽象类 找不到指定的方法
表5.3 Java常见的运行异常列表
类 名 ArithmeticException IndexOutofBoundException ArrayIndexOutofBoundsExceptio n StringIndexOutofBoundsExcepti on ClassCastException NegativeArraySizeException NullPointerException 功能描述 算术运算除数为零 下标越界错误 数组元素下标越界错误
典型的异常类
ArithmeticException ArrayIndexOutOfBandsException IOException FileNotFoundException NullPointerException NumberFormatException

表5.2 Java常见的一般异常列表
LinkageError
NoClassDefFoundError
链接错误
运行系统找不到被引用类的定义
NoSuchFieldError NoSuchMethodError OutofMemoryError UnknownError UnsatisfiedLinkError VerifyError
找不到指定域错误 所调用的方法不存在 内存不足错误 系统无法确认的错误 定义为本地的方法运行时与另外的例程相连接 错误 代码校验错误
Java中的异常类
Throwable Exception Error
RuntimeException …… IOException VirtualMachineError …… NullPointerException ArithmeticException …… FileNotFoundException ……
…… 当Java程序出现以上的错误时,就会在所处的方法中产生一个异 常对象。这个异常对象包括错误的类型,错误出现时程序的运行状态以 及对该错误的详细描述。下面我们先看一个简单的例子。
例5.1
public
class ExceptionDemo { public static void main(String args[]) { int x=100; System.out.println("The result is"+x/10); System.out.println("Divided by zero: "+x/0); } }
第五章 Java的异常处理
为什么要异常处理?





对于任何语言的程序设计而言,错误的发生总是不可避免的. 比如说: ① 用户输入出错 ② 所需文件找不到 ③ 运行时磁盘空间不够 ④内存耗尽无法进行类的实例化 ⑤ 算术运算错 (数的溢出,被零除…) ⑥ 数组下标越界
⑦JVM崩溃
VirtualMachineError
InstantiationError
虚拟机出错,可能JVM错或资源不足
企图实例化一个接口或抽象类的错误
Exception类
Exception的子类表示了不同类型的异常,例
如RuntimeException表示运行时异常,而 IOException表示I/O问题引起的异常。 这些子类也可以被继承以对不同类型的异常 进行细分,如RuntimeException还可细分为 NullPointerException、 ArithmeticException等;IOException还可 细分为FileNotFoundException、 EOFException等。
非法数据格式异常
非法参数异常 非法监视器操作异常 非法线程状态异常 栈空异常,对空栈进行操作
NoSuchElementException
SecurityException
Error
动态链接失败,虚拟机错误等,通常Java程序不 应该捕获这类异常,也不会抛出这种异常。
Exception
运行时异常
继承于RuntimeException。Java编译器允许程 序不对它们做出处理。 非运行时异常 除了运行时异常之外的其他由Exception继承 来的异常类。Java编译器要求程序必须捕获或 者声明抛出这种异常。

methodB()


methodA()
main()


当某一方法中的一个语句抛出一个异常时,如果该方法中没 有处理该异常的语句,那么该方法就会中止执行,并将这个 异常传递给堆栈中的下一层方法,直到某一方法中含有处理 该异常的语句为止。如果该异常被传递至主方法,而主方法 中仍然没有处理该异常的语句,则异常将会被抛至JVM,程 序中断。
相关文档
最新文档