1、2019/5/16,1,第9章,异常处理,2019/5/16,2,通过本章的学习,主要掌握以下知识点:异常处理的机制 捕获与处理异常 多异常处理 抛出异常 自定义异常类 本章的重点:异常处理的机制捕获与处理异常 本章的难点:自定义异常类,2019/5/16,3,9.1 异常处理的基本概念,在Java中的编译错误是由于编写的程序代码中存在着语法错误,而未能通过由源代码到字节码的编译过程而产生的错误。语法错误是由语言的编译系统负责检测和报告。没有编译错误是一个程序能正常运行的基本条件,只要没有编译错误,Java的源代码才能被编译成字节码。,2019/5/16,4,9.1.1 错误与异常,运行错误是
2、程序运行过程中产生的错误,根据性质的不同,运行错误又分为系统运行错误和逻辑运行错误。 系统运行错误简称为错误,是指程序在执行过程中所产生对操作系统的损害。 逻辑运行错误是指程序不能实现程序员的设计意图和设计功能而产生的错误,这种错误也被称为异常。,2019/5/16,5,9.1.2 Java语言的异常处理机制,Java异常处理机制,简单地说,就是程序在运行时,发现异常的代码可以“抛出”一个异常,运行系统“捕获”该异常,并交由程序员编写的相应代码进行异常处理。,2019/5/16,6,9.2 异常处理类,由于Java语言中定义了很多异常类,而每个异常类都代表一种运行错误,所以说,Java的异常类
3、是处理运行时错误的特殊类,类中包含了该运行错误的信息和处理错误的方法等内容。,2019/5/16,7,程序对错误与异常的处理方式有三种:一是程序不能处理的错误;二是程序应避免而不捕获的运行时异常;三是必须捕获的非运行时异常。,2019/5/16,8,9.3 捕获与处理异常,在Java语言中,异常处理是通过try、catch、finally、throw、throws五个关键字来实现的。异常处理的理论似乎很繁琐,但实际使用时并不复杂。,2019/5/16,9,当一个异常类的对象被捕获或接收后,用户程序就会发生流程跳转,系统终止当前的流程而跳转到专门的异常处理语句块,或直接跳出当前程序和java虚拟
4、机回到操作系统。,2019/5/16,10,在Java的异常处理机制中,提供了try-catch-finally语句来捕获和处理一个或多个异常,其语法格式如下:,try catch (异常类名 形参对象名) finally ,2019/5/16,11,catch块紧跟在try块的后面,用来接收try块可能产生的异常,一个catch语句块通常会用同样方式来处理它所接收到的所有异常,但是实际上一个try块可能产生多种不同的异常,如果希望能采取不同的方法来处理这些不同的异常,就需要使用多异常处理机制。,2019/5/16,12,【例9.2】使用try-catch-finally语句对例9.1中产生的
5、异常进行捕获与处理。,/app9_2.java 异常的捕获与处理 public class app9_2 public static void main(String args)int i;int a=1,2,3,4; for (i=0;i5;i+)trySystem.out.print(“a”+i+”/”+i+”=”+(ai/i);catch(ArrayIndexOutOfBoundsException e)System.out.print(“捕获到了数组下标越界异常”);,2019/5/16,13,【例9.2】续,catch(ArithmeticException e)System.out
6、.print(“异常类名称是:”+e); /显示异常信息catch(Exception e)System.out.println(“捕获”+e.getMessage()+”异常!”); /显示异常信息finallySystem.out.println(“ finally i=”+i);System.out.println(“继续!”); ,2019/5/16,14,程序运行结果为: 异常类名称是:java.lang.ArithmeticException:/ by zero finally i=0 a1/1=2 finally i=1 a2/2=1 finally i=2 a3/3=1 fin
7、ally i=3 捕获到了数组下标越界异常 finally i=4 继续!,2019/5/16,15,9.4 抛出异常,根据异常类的不同,抛出异常的方法也不相同。 1系统自动抛出的异常:所有系统定义的运行异常都可以由系统自动抛出。 2使用throw语句抛出的异常:用户程序自定义的异常必须借助于throw语句来抛出异常。使用throw语句抛出异常对象的语法格式为: throw 由异常类所产生的对象; 3抛出异常的方法与调用方法处理异常; 4.由方法抛出异常交系统处理。 见教材的例9.39.6,2019/5/16,16,9.5 自定义异常类,创建用户自定义异常时,一般需完成如下的工作。 1声明一个
8、新的异常类,用户自定义的异常类必须是Throwable类的直接或间接子类。 2为用户自定义的异常类定义属性和方法,或重载父类的属性和方法,使这些属性和方法能够体现该类所对应的错误信息。 用户自定义异常有可能依靠系统自动抛出,而必须借助于throw语句来定义何种情况算是产生了此种异常对应的错误,并应该抛出这个异常类的新对象。 见教材例9.7,2019/5/16,17,总结:通过本章的讨论,可以看出对异常的处理不外乎两种方式: 使用try-catch语句来处理,catch后的异常类型应对应所产生的异常类或该异常的祖先类。 如果不想在当前方法使用中try-catch语句来处理异常,可在方法声明的头部使用throws语句将它送往上一层调用机构去处理。,2019/5/16,18,再见!,