第6章异常处理_第1页
第6章异常处理_第2页
第6章异常处理_第3页
第6章异常处理_第4页
第6章异常处理_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2022年3月19日32教学重点:教学重点: 本章介绍本章介绍JavaJava语言异常处理机制应用方法。语言异常处理机制应用方法。计算机应用技术系教师专用 (ASP.NET程序设计)2022年3月19日336.1 异常处理基础异常处理基础 异常(异常(Exception)又称例外,是指程序执行过程)又称例外,是指程序执行过程中出现的不正常现象。任何一个程序都可能出现中出现的不正常现象。任何一个程序都可能出现异常,如要打开的文件不存在、内存不够、数组异常,如要打开的文件不存在、内存不够、数组访问越界等。访问越界等。计算机应用技术系教师专用(java语言程序设计)2022年3月19日346.1 异

2、常处理基础异常处理基础计算机应用技术系教师专用(java语言程序设计)ThrowableErrorExceptionVirtualMachineErrorAssertionErrorAWTErrorRuntimeExceptionAWTExceptionIOExcption2022年3月19日356.1 异常处理基础异常处理基础 Throwable类中定义了与异常处理相关的一些方法类中定义了与异常处理相关的一些方法,而其子类一般没有定义新的方法。,而其子类一般没有定义新的方法。 常用方法有:常用方法有:getMessage():获得详细的异常信息获得详细的异常信息toString():获得异常

3、的简短描述获得异常的简短描述printStackTrace():打印异常发生处堆栈跟踪信息打印异常发生处堆栈跟踪信息,包括类名、方法名以及所在程序行数,包括类名、方法名以及所在程序行数计算机应用技术系教师专用(java语言程序设计)2022年3月19日366.1 异常处理基础异常处理基础 Throwable类派生两个子类:类派生两个子类:Exception类和类和Error类。类。uError类描述内部错误,由类描述内部错误,由Java虚拟机生成并抛出,程虚拟机生成并抛出,程序不能抛出这种类型的对象,序不能抛出这种类型的对象,Error类的对象不可捕获类的对象不可捕获、不可恢复,出错时系统通知

4、用户并终止程序,如内存、不可恢复,出错时系统通知用户并终止程序,如内存溢出错、动态链接错误等溢出错、动态链接错误等uException类:由类:由Java程序抛出和处理的对象,它的各程序抛出和处理的对象,它的各种不同的子类分别对应不同类型的异常种不同的子类分别对应不同类型的异常计算机应用技术系教师专用(java语言程序设计)2022年3月19日376.1 异常处理基础异常处理基础 运行异常是指运行异常是指JavaJava程序在运行时发现的由程序在运行时发现的由JavaJava运运行系统引发的各种异常,其出现频率很高,检测行系统引发的各种异常,其出现频率很高,检测运行异常的开销很大,所以编译器不

5、要求捕获或运行异常的开销很大,所以编译器不要求捕获或声明运行异常。声明运行异常。 常见的运行异常如下所示:常见的运行异常如下所示:uArithmeticExceptionArithmeticException:算术运算中除数为零,而产生:算术运算中除数为零,而产生的异常。的异常。 uArrayIndexOutOfBoundsExceptionArrayIndexOutOfBoundsException:访问数组下标超界:访问数组下标超界异常。异常。 计算机应用技术系教师专用(java语言程序设计)2022年3月19日386.1 异常处理基础异常处理基础 非运行异常能在编译时检测到,是类非运行异

6、常能在编译时检测到,是类Non_RuntimeExceptionNon_RuntimeException及其子类的实例,可通过及其子类的实例,可通过throwsthrows语句抛出。语句抛出。 JavaJava在其标准包在其标准包java.langjava.lang、java.utiljava.util、java.iojava.io、中定义的异常类都是非运行异常类。中定义的异常类都是非运行异常类。计算机应用技术系教师专用(java语言程序设计)2022年3月19日396.1 异常处理基础异常处理基础 当程序发生异常时,就会抛出一个异常,这个异当程序发生异常时,就会抛出一个异常,这个异常可以被程

7、序捕获,进行相应处理。常可以被程序捕获,进行相应处理。 在这个结构中使用了三个关键字:在这个结构中使用了三个关键字:try, catch, try, catch, finallyfinally。 trytry后大括号中的程序段称为保护代码(后大括号中的程序段称为保护代码(protected codeprotected code),可能产生某种异常,在),可能产生某种异常,在trytry的的中不进行任何异常处理。中不进行任何异常处理。 紧接紧接trytry之后的是一系列之后的是一系列catchcatch语句,这才是处理语句,这才是处理异常的正确地方。异常的正确地方。计算机应用技术系教师专用(ja

8、va语言程序设计)2022年3月19日3106.1 异常处理基础异常处理基础 catchcatch与方法的定义相似,需要一个参数,该参数与方法的定义相似,需要一个参数,该参数必须是必须是ThrowableThrowable类或其子类的一个对象或接口。类或其子类的一个对象或接口。 catchcatch的作用是当系统或应用程序抛出一个异常后的作用是当系统或应用程序抛出一个异常后,通过与,通过与catchcatch的参数比较,如果相匹配,就执行的参数比较,如果相匹配,就执行catchcatch方法中的异常处理程序段,否则与一下方法中的异常处理程序段,否则与一下catchcatch继续进行相匹配的比较

9、。继续进行相匹配的比较。计算机应用技术系教师专用(java语言程序设计)2022年3月19日3116.1 异常处理基础异常处理基础 相匹配的含义指符合下列三种情况之一:相匹配的含义指符合下列三种情况之一: u被抛出的异常类与被抛出的异常类与catchcatch参数指定类是同一类参数指定类是同一类u被抛出的异常类是被抛出的异常类是catchcatch参数指定类的子类。参数指定类的子类。u如果如果catchcatch参数是一个接口,而被抛出的异常类实现了参数是一个接口,而被抛出的异常类实现了这个接口。这个接口。 catchcatch检查匹配是顺序进行的,当程序中包含多条检查匹配是顺序进行的,当程序

10、中包含多条catchcatch语句时,如果语句时,如果catchcatch安排的顺序不当,可能安排的顺序不当,可能导致某些导致某些catchcatch后的处理程序段永远不会被执行后的处理程序段永远不会被执行计算机应用技术系教师专用(java语言程序设计)2022年3月19日3126.1 异常处理基础异常处理基础 例如下面的程序段:例如下面的程序段:catch (IOException e) catch (IOException e) 异常处理异常处理1;1;catch (FileNotFoundException e) catch (FileNotFoundException e) 异常处理异

11、常处理2;2;u所以在使用所以在使用catchcatch语句时,应该清楚所有参数所属类的语句时,应该清楚所有参数所属类的层次,以便正确安排层次,以便正确安排catchcatch语句的顺序。语句的顺序。u如果出现这种错误,如果出现这种错误,javacjavac编译器会发出错误信息:编译器会发出错误信息:catch not reachedcatch not reached。计算机应用技术系教师专用(java语言程序设计)2022年3月19日3136.1 异常处理基础异常处理基础 无论无论trytry是否抛出异常,还是某个是否抛出异常,还是某个catchcatch进行了异进行了异常处理,常处理,fi

12、nallyfinally后的程序段总要被执行一次。后的程序段总要被执行一次。 唯一不被执行的情况是唯一不被执行的情况是trytry或或catchcatch中执行了中执行了System.exit()System.exit(),则程序立即中止。,则程序立即中止。 在在try-catch-finallytry-catch-finally这个编程结构中,这个编程结构中,catchcatch语语句和句和finallyfinally语句是可选的,但至少使用其中一个语句是可选的,但至少使用其中一个语句。语句。 计算机应用技术系教师专用(java语言程序设计)2022年3月19日3146.1 异常处理基础异常

13、处理基础 在在try-catch-finallytry-catch-finally结构中,可以使用嵌套形式结构中,可以使用嵌套形式,即在捕获异常处理过程中,可以继续抛出异常,即在捕获异常处理过程中,可以继续抛出异常。 在这种嵌套结构中,产生异常后,首先与最内层在这种嵌套结构中,产生异常后,首先与最内层的的try-catch-finallytry-catch-finally结构中的结构中的catchcatch语句进行匹语句进行匹配比较。配比较。 如果没有相匹配的如果没有相匹配的catchcatch语句,该异常情况可以被语句,该异常情况可以被抛出,让外层的抛出,让外层的try-catch-finl

14、lytry-catch-finlly的结构重复进的结构重复进行匹配检查行匹配检查。计算机应用技术系教师专用(java语言程序设计)2022年3月19日3156.1 异常处理基础异常处理基础 这样从最内层到最外层,逐一检查匹配,直到找这样从最内层到最外层,逐一检查匹配,直到找到一个匹配为止。到一个匹配为止。 如果所有的如果所有的try-catch-finallytry-catch-finally结构中都没有找到结构中都没有找到一个与异常匹配的一个与异常匹配的catchcatch,则,则JavaJava系统会打印一个系统会打印一个与该异常相关的信息并显示异常发生时的堆栈状与该异常相关的信息并显示异

15、常发生时的堆栈状态。态。计算机应用技术系教师专用(java语言程序设计)2022年3月19日3166.2 异常抛出异常抛出 JavaJava通过使用通过使用throwsthrows语句指定异常类型并抛出异语句指定异常类型并抛出异常,抛出异常的方法并不处理异常,而是由调用常,抛出异常的方法并不处理异常,而是由调用该方法的另一个方法来处理,其格式如下:该方法的另一个方法来处理,其格式如下:public void readFile() throws IOExceptionpublic void readFile() throws IOException ./ ./包含可能产生包含可能产生IOIO异常

16、的语句异常的语句public void myfunc() throws public void myfunc() throws MyException1,MyException2MyException1,MyException2.计算机应用技术系教师专用(java语言程序设计)2022年3月19日3176.2 异常抛出异常抛出 在在throwsthrows语句中指定的异常类可以是实际抛出异常类语句中指定的异常类可以是实际抛出异常类型的父类。型的父类。 为了确定需要抛出哪些异常方法有二:为了确定需要抛出哪些异常方法有二:一是通过经验,仔细查找所调用的方法可能产生的异常;一是通过经验,仔细查找所调

17、用的方法可能产生的异常;二是先不作任何声明,等待编译器报错,编译器将通报所二是先不作任何声明,等待编译器报错,编译器将通报所有需要用有需要用throwsthrows语句抛出的异常。语句抛出的异常。计算机应用技术系教师专用(java语言程序设计)2022年3月19日3186.2 异常抛出异常抛出 也可在语句块中用也可在语句块中用throwthrow语句抛出异常(可以是用语句抛出异常(可以是用户定义的异常)。户定义的异常)。 这种方式应被定义在满足一定条件时执行。这种方式应被定义在满足一定条件时执行。 例如:例如:try If(满足条件满足条件) throw(new SelfDefException) Catch(SelfDefException e) class SelfDefException extends Throwable 计算机应用技术系教师专用(java语言程序设计)2022年3月19日3196.3如何创建自己的异常如何创建自己的异常 用户定义的异常类型必须是用户定义的异常类型必须是Throwable的直接或间的直接或间接子类接子类 Java推荐用户定义的异常类型为推荐用户定义的异常类型为Exception的直接

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论