B06异常-1ppt课件(全).ppt
《B06异常-1ppt课件(全).ppt》由会员分享,可在线阅读,更多相关《B06异常-1ppt课件(全).ppt(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第6章章 Java 的异常处理机制的异常处理机制6.1 异常的含义及分类6.2 异常处理6.3 两种抛出异常的方式6.4 自定义异常6.5 常见异常6.1 异常的含义及分类异常的含义及分类1异常的含义所谓异常就是程序运行时可能出现一些错误,所谓异常就是程序运行时可能出现一些错误,比如试图打开一个根本不存在的文件等比如试图打开一个根本不存在的文件等2异常处理的必要性传统错误处理的不足之处,主要表现为:(传统错误处理的不足之处,主要表现为:(1 1)程序复杂;()程序复杂;(2 2)可靠性差;(可靠性差;(3 3)返回信息有限;()返回信息有限;(4 4)返回代码标准化困难。返回代码标准化困难。
2、JavaJava语言采用错误代码和异常处理相结合的方式可以把错误代码语言采用错误代码和异常处理相结合的方式可以把错误代码与常规代码分开,也可以在与常规代码分开,也可以在catchcatch中传播错误信息,还可以对错误中传播错误信息,还可以对错误类型分组。类型分组。6.1 异常的含义及分类异常的含义及分类3异常的分类在在javajava语言中,异常是一个对象,它继承于语言中,异常是一个对象,它继承于ThrowableThrowable类,所有的类,所有的ThrowableThrowable类的子孙类所产生的对象都是例类的子孙类所产生的对象都是例外(异常)。从外(异常)。从ThrowableThr
3、owable直接派生出的异常类有直接派生出的异常类有 Exception Exception 和和 Error Error,如图,如图6-16-1所示。所示。图6-1 Java异常层次图ThrowableErrorExceptionRuntimeExceptionContingencyException6.1 异常的含义及分类异常的含义及分类ExceptionException 是是代代表表了了真真正正实实际际意意义义上上的的异异常常对对象象的的根根基基类类。Exception Exception 和和从从它它派派生生而而来来的的所所有有异异常常都都是是应应用用程程序序能能够够捕捕获获到的,并
4、且可以进行异常错误恢复处理的异常类型。到的,并且可以进行异常错误恢复处理的异常类型。Error Error 则则表表示示 出出现现了了一一个个非非常常严严重重的的异异常常错错误误,并并且且这这个个错错误误可可能能是是应应用用程程序序所所不不能能恢恢复复的的,例例如如 LinkageError LinkageError,或或 ThreadDeath ThreadDeath 等等。由由JavaJava虚虚拟拟机机生生成成并并抛抛出出,JavaJava程程序序不不做做处处理。理。和和的的子子类类免免于于编编译译时时的的检检查查。RuntimeExceptionRuntimeException异异常常
5、由由系系统统检检测测,用用户户的的Java Java 程程序序可可不不做做处处理理,系系统统将将它它们们交交给给缺缺省省的的异异常常处理程序。处理程序。6.2 异常处理异常处理6.2.1 异常处理的基本结构6.2.2 多个catch 块6.2.3 finally语句6.2.1 异常处理的基本结构异常处理的基本结构1异常处理的定义异常处理是用户程序以预定的方式响应运行错误和异异常处理是用户程序以预定的方式响应运行错误和异常的能力。它的基本方式是:当一个方法引发一个异常的能力。它的基本方式是:当一个方法引发一个异常后,可将异常抛出,由该方法的直接或者间接调用常后,可将异常抛出,由该方法的直接或者间
6、接调用者处理异常。者处理异常。2异常处理语句异常处理语句有异常处理语句有trytry、catchcatch、finallyfinally、throwthrow和和throwsthrows。在以下部分将逐一介绍这些语句的作用。在以下部分将逐一介绍这些语句的作用。6.2.1 异常处理的基本结构异常处理的基本结构3异常处理的基本结构try try catchcatch结构是异常处理的基本结构。这种结构中可能引发结构是异常处理的基本结构。这种结构中可能引发异常的语句封入在异常的语句封入在trytry块中,而处理异常的相应语句封入在块中,而处理异常的相应语句封入在catchcatch块中。结构的格式如下
7、:块中。结构的格式如下:1.1.trytry2.2.程序执行体程序执行体3.3.4.4.catch(catch(异常类型异常类型1 1 异常对象异常对象1)1)5.5.异常处理程序体异常处理程序体1 16.6.6.2.1 异常处理的基本结构异常处理的基本结构3异常处理的基本结构7.7.catch(catch(异常类型异常类型2 2 异常对象异常对象2)2)8.8.异常处理程序体异常处理程序体2 29.9.10.10.11.11.catch(catch(异常类型异常类型n n 异常对象异常对象n n)12.12.异常处理程序体异常处理程序体n n13.13.14.14.finally final
8、ly 15.15.异常处理结束前的执行程序体异常处理结束前的执行程序体16.16./不论发生什么异常(或者不发生任何异常),都要执行的部分不论发生什么异常(或者不发生任何异常),都要执行的部分;17.17.6.2.1 异常处理的基本结构异常处理的基本结构说明:(1 1)trytry语句指明可能产生异常的代码段语句指明可能产生异常的代码段;(2 2)catchcatch语句在语句在trytry语句之后,用于捕捉异常,一个语句之后,用于捕捉异常,一个trytry语句可以有多个语句可以有多个catchcatch语句与之匹配。当有多个语句与之匹配。当有多个catchcatch语句时,系统依照先后顺序逐
9、个检查语句时,系统依照先后顺序逐个检查 。用。用catchcatch语句捕捉异常时,若找不到相匹配的语句捕捉异常时,若找不到相匹配的catchcatch语句,将执语句,将执行缺省的异常处理。行缺省的异常处理。(3 3)将)将catchcatch程序块的参数不能设置成多个,一个程序块的参数不能设置成多个,一个catchcatch只有一个参数只有一个参数.6.2.1 异常处理的基本结构异常处理的基本结构说明:(4 4)若两个)若两个catchcatch程序块(均和某个程序块(均和某个trytry程序块有关)程序块有关)都用于捕捉同一类型异常,那么将产生语法错误。都用于捕捉同一类型异常,那么将产生语
10、法错误。(5 5)若某一类型异常,可能有几个异常处理程序与若某一类型异常,可能有几个异常处理程序与他相匹配,那么执行他相匹配,那么执行firstfirst相匹配的异常处理程序相匹配的异常处理程序(6 6)javajava中可以使用嵌套的中可以使用嵌套的trytrycatchcatch结构。在使用结构。在使用嵌套的嵌套的trytry块时,将先执行内部块时,将先执行内部trytry块,如果没有遇到块,如果没有遇到匹配的匹配的catchcatch块块 则将检查外部则将检查外部trytry块的块的catchcatch块。块。6.2.1 异常处理的基本结构异常处理的基本结构throw语句用于指出当前现有
11、异常,当程序执行到用于指出当前现有异常,当程序执行到throwthrow语句时,语句时,流程就转到相匹配的异常处理语句,所在的方法也不流程就转到相匹配的异常处理语句,所在的方法也不再返回值。再返回值。throwthrow语句可以将异常对象提交给调用者,语句可以将异常对象提交给调用者,以进行再次处理。以进行再次处理。throws语句指明方法中可能要产生的异常类型,由调用者进行异指明方法中可能要产生的异常类型,由调用者进行异常处理。常处理。6.2.1 异常处理的基本结构异常处理的基本结构【实例6-1】1.1.public class public class DividerByZeroDivide
12、rByZero 2.2.public static void public static void main(Stringmain(String argsargs)3.3.double num=1;double num=1;4.4.try try 5.5.num=1/0;num=1/0;6.6.7.7.catch(catch(ArithmeticExceptionArithmeticException e)e)8.8.System.out.print(AnSystem.out.print(An arithmetic exception arithmetic exception occurred
13、!);occurred!);9.9.10.10.11.11.6.2.1 异常处理的基本结构异常处理的基本结构【实例6-1】运行结果为:An arithmetic exception occurred!An arithmetic exception occurred!说明:在本实例中,在本实例中,trytry语句块中语句语句块中语句num=1/0num=1/0被执行时,由被执行时,由于被除数为于被除数为0 0,因此产生,因此产生ArithmeticExceptionArithmeticException异常,异常,catchcatch语句捕获到这类异常后,输出语句捕获到这类异常后,输出“An a
14、rithmetic An arithmetic exception occurred!”exception occurred!”。6.2.2 多个多个catch 块块单个try块能有许多catch块,当try块有可以引起不同类型异常的语句时,多个catch块是必须的。【实例6-2】1.1.public class TryCatchpublic class TryCatch2.2.public static void main(String args)public static void main(String args)3.3.int a=0int a=0,0;0;4.4.int num=1i
15、nt num=1,result=0;result=0;5.5.try try 6.6.result=num/0;result=num/0;7.7.System.out.println(num/a2);System.out.println(num/a2);8.8.9.9.catch(ArithmeticException e)catch(ArithmeticException e)10.10.System.out.println(ErrorSystem.out.println(Error e);e);11.11.12.12.catch(ArrayIndexOutOfBoundsException
16、 e)catch(ArrayIndexOutOfBoundsException e)13.13.System.out.println(ErrorSystem.out.println(Error e);e);14.14.15.15.catch(Exception e)catch(Exception e)16.16.System.out.println(Some other error:);System.out.println(Some other error:);17.17.18.18.19.19.【实例6-2】运行结果:Error=java.lang.ArithmeticException:/
17、by zeroError=java.lang.ArithmeticException:/by zero说明:在本实例中,(1 1)执行语句)执行语句result=num/0;result=num/0;出现被零除异常,此时执行出现被零除异常,此时执行catch catch(ArithmeticException e)(ArithmeticException e)块中的语句。此时语句块中的语句。此时语句System.out.println(num/a2);System.out.println(num/a2);没有执行到。没有执行到。(2 2)如果将)如果将result=num/0result=nu
18、m/0;注释掉,那么当执行语句;注释掉,那么当执行语句“System.out.println(num/a2);”“System.out.println(num/a2);”时会出现数组下标越界异常时会出现数组下标越界异常ArrayIndexOutOfBoundsExceptionArrayIndexOutOfBoundsException,因此此时运行结果为:,因此此时运行结果为:Error=java.lang.ArrayIndexOutOfBoundsException:2Error=java.lang.ArrayIndexOutOfBoundsException:2(3 3)若出现其他)若出
19、现其他ExceptionException异常,则由异常,则由catch(Exception e)catch(Exception e)捕获,捕获,显示显示Some other error:Some other error:。6.2.3 finally语句语句finallyfinally语句可以和语句可以和trytry语句一起使用,无论是否出现异常,语句一起使用,无论是否出现异常,finallyfinally语句指明的代码一定被执行。一个异常处理程序语句指明的代码一定被执行。一个异常处理程序只有一个只有一个finallyfinally块,但并不强制必须要有块,但并不强制必须要有finallyfi
20、nally块。块。有时,必需处理某些语句(如文件关闭操作),不管异常有时,必需处理某些语句(如文件关闭操作),不管异常是否发生,都必须执行。此时,虽然能够在是否发生,都必须执行。此时,虽然能够在trytry和和catchcatch块块放置代码以结束文件,但是为了避免重写代码,可以把代放置代码以结束文件,但是为了避免重写代码,可以把代码放在码放在 finallyfinally块。块。有时候我们希望某些语句在发生异常时也能执行,以释放有时候我们希望某些语句在发生异常时也能执行,以释放外部资源或者关闭一个文件,这时可以用外部资源或者关闭一个文件,这时可以用finally finally 语句来语句来
21、实现。实现。【实例6-3】1.1.import .*;import .*;2.2.import java.io.*;import java.io.*;3.3.class withoutFinallyExampleclass withoutFinallyExample4.4.public void foo()throws IOException public void foo()throws IOException5.5./在空闲的端口上创建一个套接字在空闲的端口上创建一个套接字6.6.ServerSocket ss=new ServerSocket(0);ServerSocket ss=new
22、 ServerSocket(0);7.7.try try 8.8.Socket socket=ss.accept();Socket socket=ss.accept();9.9./此处的其他代码此处的其他代码.10.10.11.11.catch(IOException e)catch(IOException e)12.12.ss.close();/label1 ss.close();/label113.13.throw e;throw e;14.14.15.15././.16.16.ss.close();/label2 ss.close();/label217.17.18.18.【实例6-3】
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- B06 异常 ppt 课件
限制150内