《Java程序设计第2版第九章.ppt》由会员分享,可在线阅读,更多相关《Java程序设计第2版第九章.ppt(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2023/4/21第第9 9章章异常处理异常处理 2023/4/22通过本章的学习,主要掌握以下知识点:通过本章的学习,主要掌握以下知识点:异常处理的机制异常处理的机制 捕获与处理异常捕获与处理异常 多异常处理多异常处理 抛出异常抛出异常 自定义异常类自定义异常类 本章的重点:本章的重点:异常处理的机制异常处理的机制 捕获与处理异常捕获与处理异常本章的难点:本章的难点:自定义异常类自定义异常类2023/4/239.1 9.1 异常处理的基本概念异常处理的基本概念 在在JavaJava中的编译错误是由于编写的程序代码中中的编译错误是由于编写的程序代码中存在着语法错误,而未能通过由源代码到字节码的
2、存在着语法错误,而未能通过由源代码到字节码的编译过程而产生的错误。语法错误是由语言的编译编译过程而产生的错误。语法错误是由语言的编译系统负责检测和报告。没有编译错误是一个程序能系统负责检测和报告。没有编译错误是一个程序能正常运行的基本条件,只要没有编译错误,正常运行的基本条件,只要没有编译错误,JavaJava的的源代码才能被编译成字节码。源代码才能被编译成字节码。2023/4/249.1.1 9.1.1 错误与异常错误与异常运运行行错错误误是是程程序序运运行行过过程程中中产产生生的的错错误误,根根据据性性质质的的不不同同,运运行行错错误误又又分分为为系系统统运运行行错错误误和和逻逻辑辑运行错
3、误。运行错误。系系统统运运行行错错误误简简称称为为错错误误,是是指指程程序序在在执执行行过过程中所产生对操作系统的损害。程中所产生对操作系统的损害。逻逻辑辑运运行行错错误误是是指指程程序序不不能能实实现现程程序序员员的的设设计计意意图图和和设设计计功功能能而而产产生生的的错错误误,这这种种错错误误也也被被称称为为异常。异常。2023/4/259.1.2 Java9.1.2 Java语言的异常处理机制语言的异常处理机制JavaJava异常处理机制异常处理机制,简单地说简单地说,就是程序在就是程序在运行时运行时,发现异常的代码可以发现异常的代码可以“抛出抛出”一个异一个异常,运行系统常,运行系统“
4、捕获捕获”该异常,并交由程序员该异常,并交由程序员编写的相应代码进行异常处理。编写的相应代码进行异常处理。2023/4/269.2 9.2 异常处理类异常处理类由于由于JavaJava语言中定义了很多异常类,而每语言中定义了很多异常类,而每个异常类都代表一种运行错误,所以说,个异常类都代表一种运行错误,所以说,JavaJava的异常类是处理运行时错误的特殊类,类中包的异常类是处理运行时错误的特殊类,类中包含了该运行错误的信息和处理错误的方法等内含了该运行错误的信息和处理错误的方法等内容。容。2023/4/27程序对错误与异常的处理方式有三种:一是程程序对错误与异常的处理方式有三种:一是程序不能
5、处理的错误;二是程序应避免而不捕获的运序不能处理的错误;二是程序应避免而不捕获的运行时异常;三是必须捕获的非运行时异常。行时异常;三是必须捕获的非运行时异常。2023/4/289.3 9.3 捕获与处理异常捕获与处理异常在在JavaJava语言中,异常处理是通过语言中,异常处理是通过trytry、catchcatch、finallyfinally、throwthrow、throwsthrows五个关五个关键字来实现的。异常处理的理论似乎很繁键字来实现的。异常处理的理论似乎很繁琐,但实际使用时并不复杂。琐,但实际使用时并不复杂。2023/4/29当一个异常类的对象被捕获或接收后,当一个异常类的对
6、象被捕获或接收后,用户程序就会发生流程跳转,系统终止当前用户程序就会发生流程跳转,系统终止当前的流程而跳转到专门的异常处理语句块,或的流程而跳转到专门的异常处理语句块,或直接跳出当前程序和直接跳出当前程序和javajava虚拟机回到操作系虚拟机回到操作系统。统。2023/4/210在在JavaJava的异常处理机制中,提供了的异常处理机制中,提供了try-catch-try-catch-finallyfinally语句来捕获和处理一个或多个异常,其语语句来捕获和处理一个或多个异常,其语法格式如下:法格式如下:trytry catch(catch(异常类名异常类名 形参对象名形参对象名)fina
7、llyfinally 2023/4/211catchcatch块紧跟在块紧跟在trytry块的后面,用来接收块的后面,用来接收trytry块可能产生的异常,一个块可能产生的异常,一个catchcatch语句块通常语句块通常会用同样方式来处理它所接收到的所有异常,会用同样方式来处理它所接收到的所有异常,但是实际上一个但是实际上一个trytry块可能产生多种不同的异块可能产生多种不同的异常,如果希望能采取不同的方法来处理这些不常,如果希望能采取不同的方法来处理这些不同的异常,就需要使用多异常处理机制。同的异常,就需要使用多异常处理机制。2023/4/212【例例9.2】使使用用try-catch-
8、finally语语句句对对例例9.1中中产产生生的的异常进行捕获与处理。异常进行捕获与处理。/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+)try System.out.print(“a”+i+”/”+i+”=”+(ai/i);catch(ArrayIndexOutOfBoundsException e)System.out.print(“捕获到了数组下标越界异常”);2023/4/213【例例9.2】续续 catch(A
9、rithmeticException e)System.out.print(“异常类名称是:”+e);/显示异常信息 catch(Exception e)System.out.println(“捕获”+e.getMessage()+”异常!”);/显示异常信息 finally System.out.println(“finally i=”+i);System.out.println(“继续!”);2023/4/214程序运行结果为:程序运行结果为:异常类名称是:异常类名称是:java.lang.ArithmeticException:/by zero finally i=0a1/1=2 fin
10、ally i=1a2/2=1 finally i=2a3/3=1 finally i=3捕获到了数组下标越界异常捕获到了数组下标越界异常 finally i=4继续!继续!2023/4/2159.4 9.4 抛出异常抛出异常根据异常类的不同,抛出异常的方法也不相同。根据异常类的不同,抛出异常的方法也不相同。1 1系统自动抛出的异常:所有系统定义的运行异系统自动抛出的异常:所有系统定义的运行异常都可以由系统自动抛出。常都可以由系统自动抛出。2 2使用使用throwthrow语句抛出的异常:用户程序自定义语句抛出的异常:用户程序自定义的异常必须借助于的异常必须借助于throwthrow语句来抛出异
11、常。语句来抛出异常。使用使用throw语句抛出异常对象的语法格式为:语句抛出异常对象的语法格式为:throw 由异常类所产生的对象;由异常类所产生的对象;3抛出异常的方法与调用方法处理异常抛出异常的方法与调用方法处理异常;4.由方法抛出异常交系统处理。由方法抛出异常交系统处理。见教材的例见教材的例9.39.62023/4/2169.5 9.5 自定义异常类自定义异常类创建用户自定义异常时,一般需完成如下的工作。创建用户自定义异常时,一般需完成如下的工作。1声明一个新的异常类,用户自定义的异常类必声明一个新的异常类,用户自定义的异常类必须是须是Throwable类的直接或间接子类。类的直接或间接
12、子类。2为用户自定义的异常类定义属性和方法,或重为用户自定义的异常类定义属性和方法,或重载父类的属性和方法,使这些属性和方法能够体现该载父类的属性和方法,使这些属性和方法能够体现该类所对应的错误信息。类所对应的错误信息。用户自定义异常有可能依靠系统自动抛出,而必用户自定义异常有可能依靠系统自动抛出,而必须借助于须借助于throw语句来定义何种情况算是产生了此种异语句来定义何种情况算是产生了此种异常对应的错误,并应该抛出这个异常类的新对象。常对应的错误,并应该抛出这个异常类的新对象。见教材例见教材例9.72023/4/217总结:通过本章的讨论,可以看出对异常的处总结:通过本章的讨论,可以看出对异常的处理不外乎两种方式:理不外乎两种方式:使用使用try-catchtry-catch语句来处理,语句来处理,catchcatch后的异常类后的异常类型应对应所产生的异常类或该异常的祖先类。型应对应所产生的异常类或该异常的祖先类。如果不想在当前方法使用中如果不想在当前方法使用中try-catchtry-catch语句来语句来处理异常,可在方法声明的头部使用处理异常,可在方法声明的头部使用throwsthrows语句将语句将它送往上一层调用机构去处理。它送往上一层调用机构去处理。2023/4/218再见!