第02章异常.ppt

上传人:hyn****60 文档编号:71378783 上传时间:2023-02-03 格式:PPT 页数:34 大小:517.50KB
返回 下载 相关 举报
第02章异常.ppt_第1页
第1页 / 共34页
第02章异常.ppt_第2页
第2页 / 共34页
点击查看更多>>
资源描述

《第02章异常.ppt》由会员分享,可在线阅读,更多相关《第02章异常.ppt(34页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、Java高高级程序程序设计第一部分第一章Java入门基础第二章异常第三章JavaApplet类型第四章图形用户界面GUI(一)AWT第五章Java中的事件处理机制第六章图形用户界面GUI(二)SwingJava高高级程序程序设计第七章多线程第八章I/O输入输出流第九章Java数据库连接(JDBC)第十章Java网络编程第二部分第一章JavaAPI第二章Java与多媒体第三章JavaBean基础JavaJava高级程序设计高级程序设计异常异常第二章异常2.1 什么是异常 2.1.1 异常处理基础2.1.2 Java异常处理机制 2.2 异常的类型 2.2.1 Java异常类类型2.2.2 Jav

2、a异常类组成 2.3 未被捕获的异常2.3.1 未被捕获的异常2.4 trycatch语句 2.4.1 系统自定义异常的处理 2.4.2 使用多重catch语句、嵌套try语句 JavaJava高级程序设计高级程序设计异常异常第二章异常2.5 自定义异常与throw关键字2.5.1 创建自己的异常2.5.2 使用throw抛出异常2.6 throws与finally关键字2.6.1 使用throws声明异常2.6.2 使用finally关键字2.7 Java的内置异常 2.7.1 Java的内置异常JavaJava高级程序设计高级程序设计异常异常.1什么是异常语法错误和运行错误:对类似于C+这

3、样的高级编程语言来说,捕获程序出错信息最理想的阶段是在编译期间,即试图运行程序以前。然而,并非所有错误都能在编译期间检测到。有些问题可能会在程序运行时才暴露出来。例如,想打开的文件不存在、网络连接中断、受控操作数超出预定范围、除数为0等等。我们一般称编译时被检测出来的错误为语法法错误,这种错误一旦产生并不会生成运行代码。而另一种是运行运行错误,它是在程序运行时代码序列中产生的一种出错情况。这种运行错误倘若没有及时进行处理,可能会造成程序中断、数据遗失乃至系统崩溃等问题。这种运行错误也就是我们常说的“异常异常”。JavaJava高级程序设计高级程序设计异常异常.1什么是异常早期语言打开文件的程序

4、段readFileopenthefile;/打开文件readthefileintomemory;/将文件读入内存;closethefile;/关闭该文件;处理异常后的程序段readFileinterrorCode=0;openthefile;if(theFileOpen)determineitssize;/测定文件长度if(gotEnoughMemory)readthefileintomemory;if(readFailed)errorCode=-1;elseerrorCode=-2;elseerrorCode=-3;closethefile;returnerrorCode;JavaJava高

5、级程序设计高级程序设计异常异常.1什么是异常Java异常处理机制:为了能够及时有效地处理程序中的运行错误,Java中引入了异常和异常类的概念。在Java中定义了很多异常类,每个异常类都代表了一种常见的运行错误,类中包含了该运行错误的信息和处理错误的方法等内容。每当Java程序运行过程中发生一个可识别的运行错误时,即该错误有一个异常类与之相对应时,系统都会产生一个相应的该异常类的对象。一旦一个异常对象产生了,就将其抛出到其调用程序中,发出已经发生问题的信号。然后,调用方法捕获抛出的异常,在可能时,再恢复回来。JavaJava高级程序设计高级程序设计异常异常.异常的类型Java异常体系图:Java

6、Java高级程序设计高级程序设计异常异常.异常的类型Java异常类类型描述:Throwable类是类库java.lang包中的一个类,它派生了两个子类:Exception和Error。其中Error类由系统保留,而Exception类则供应用程序使用。Error类描述了Java程序运行期间系统内部的错误以及资源耗尽的情况,如动态链接失败、虚拟机错误等,通常在Java编程语言中,Error类定义被认为是不能恢复的严重错误条件。在大多数情况下,当遇到这样的错误时,建议让程序中断。Exception类是Java程序中大量处理的异常,该类又可分为两类:从RuntimeException衍生出来的异常和

7、衍生于Exception的其他子类的异常。RuntimeException类一般是由编程错误产生的,出现这类异常时,程序员需调试程序避免这类异常的产生,该类异常一般包括错误的造型、数组越界存取、空指针访问等。衍生于Exception的其他子类的异常一般是由于不可预测因素造成的,使得语法正确的程序出现了问题,该类异常一般包括试图越过文件尾继续存放、试图打开一个错误的URL等。JavaJava高级程序设计高级程序设计异常异常.异常的类型Exception类的构造方法有四个:public Exception()public Exception(String message)public Except

8、ion(String message,Throwable cause)public Exception(Throwable cause)第二个构造方法可以接受字符串参数传入的信息,该信息通常是对该异常所对应的错误的描述。第三个构造方法中cause参数保存出错原因,便于以后使用Throwable.getCause()方法重获,该参数可为空。JavaJava高级程序设计高级程序设计异常异常.异常的类型Java异常类的常用方法:Exception类的常用方法:JavaJava高级程序设计高级程序设计异常异常2.3 未被捕获的异常未被捕获的异常:下面的小程序包括一个故意导致被零除错误的表达式。clas

9、sExc0publicstaticvoidmain(Stringargs)intd=0;inta=42/d;下面是由标准javaJDK运行解释器执行该程序产生的输出:java.lang.ArithmeticException:/byzeroatExc0.main(Exc0.java:4)JavaJava高级程序设计高级程序设计异常异常2.3 未被捕获的异常未被捕获的异常:当Java运行时系统检查到被零除的情况,它构造一个新的异常对象然后引发该异常。这导致Exc0的执行停止,因为一旦一个异常被引发,它必须被一个异常处理程序捕获并且被立即处理。任何不是被你程序捕获的异常最终都会被该默认处理程序处理

10、。默认处理程序显示一个描述异常的字符串,打印异常发生处的堆栈轨迹并且终止程序。JavaJava高级程序设计高级程序设计异常异常2.3 未被捕获的异常未被捕获的异常:注意:类名Exc0,方法名main,文件名Exc0.java和行数4是怎样被包括在一个简单的堆栈使用轨迹中的。注意:引发的异常类型是Exception的一个名字叫做ArithmeticException的子类,该子类更明确的描述了何种类型的错误方法。JavaJava高级程序设计高级程序设计异常异常2.3 未被捕获的异常未被捕获的异常:下面是前面程序的另一个版本,它介绍了相同的错误,但是错误是在main()方法之外的另一个方法中产生的

11、:classExc1staticvoidsubroutine()intd=0;inta=10/d;publicstaticvoidmain(Stringargs)Exc1.subroutine();JavaJava高级程序设计高级程序设计异常异常2.3 未被捕获的异常未被捕获的异常:下面是由标准javaJDK运行解释器执行该程序产生的输出:java.lang.ArithmeticException:/byzeroatExc1.subroutine(Exc1.java:4)atExc1.main(Exc1.java:7)如你所见,栈底是main的第7行,该行调用了subroutine()方法。该

12、方法在第4行导致了异常。调用堆栈对于调试来说是很重要的,因为它查明了导致错误的精确的步骤。JavaJava高级程序设计高级程序设计异常异常2.4 trycatch语句使用try和catch尽管由Java运行时系统提供的默认异常处理程序对于调试是很有用的,但通常你希望自己处理异常。这样做有两个好处。第一,它允许你修正错误。第二,它防止程序自动终止。为防止和处理一个运行时错误,需要把你所要监控的代码放进一个try块就可以了。紧跟着try块的,包括一个说明你希望捕获的错误类型的catch子句。JavaJava高级程序设计高级程序设计异常异常2.4 trycatch语句下面是一个异常处理块的通常形式:

13、try/blockofcodetomonitorforerrorscatch(ExceptionType1exOb)/exceptionhandlerforExceptionType1catch(ExceptionType2exOb)/exceptionhandlerforExceptionType2/.finally/blockofcodetobeexecutedbeforetryblockends这里,ExceptionType是发生异常的类型。JavaJava高级程序设计高级程序设计异常异常2.4 trycatch语句举例:classExc2publicstaticvoidmain(St

14、ringargs)intd,a;try/monitorablockofcode.d=0;a=42/d;System.out.println(“Thiswillnotbeprinted.”);catch(ArithmeticExceptione)System.out.println(“Divisionbyzero.”);System.out.println(“Aftercatchstatement.”);该程序输出如下:Divisionbyzero.Aftercatchstatement.JavaJava高级程序设计高级程序设计异常异常2.4 trycatch语句使用try和catch注意:一旦

15、异常被引发,程序控制由try块转到catch块。执行永远不会从catch块“返回”到try块。一个try和它的catch语句形成了一个单元。catch子句的范围限制于try语句前面所定义的语句。一个catch语句不能捕获另一个try声明所引发的异常(除非是嵌套的try语句情况)。被try保护的语句声明必须在一个大括号之内。不能单独使用try。构造catch子句的目的是解决异常情况并且像错误没有发生一样继续运行。JavaJava高级程序设计高级程序设计异常异常2.4 trycatch语句使用多重catch语句、嵌套try语句某些情况,由单个代码段可能引起多个异常。处理这种情况,你可以定义两个或更

16、多的catch子句,每个子句捕获一种类型的异常。当你用多catch语句时,异常子类必须在它们任何父类之前使用。这样,如果子类在父类后面,子类将永远不会到达,而且,Java中有不能到达的代码是一种语法错误。各个异常都派生于同一超类。如果一个catch处理方法用于捕获某个超类类型的异常对象,则它也可以捕获该类的所有子类的对象。这使得用一条简洁的catch子句表达式就能处理多个相关的错误,并且允许了多态性地处理这些相关的异常。JavaJava高级程序设计高级程序设计异常异常2.5 自定义异常与throw关键字创建自己的异常:系统定义的异常主要用来处理系统可以预见较为常见的运行错误,对于某个应用所特有

17、的运行错误,则需要编程人员根据程序的特殊逻辑在用户程序里自己创建用户自定义的异常类和异常对象。用户定义异常可通过扩展Exception类来创建的。这种异常类可以包含一个“普通”类所拥有的构造函数、变量以及方法。JavaJava高级程序设计高级程序设计异常异常2.5 自定义异常与throw关键字throw关键字的使用:用户程序自定义的异常不可能依靠系统自动抛出,必须借助于throw语句来定义何种情况算是产生了此种异常对应的错误,并应该抛出这个异常类的新对象。程序执行在throw语句之后立即停止;后面的任何语句不被执行。最紧紧包围的try块用来检查它是否含有一个与异常类型匹配的catch语句。如果

18、发现了匹配的块,控制转向该语句;如果没有发现,次包围的try块来检查,以此类推。如果没有发现匹配的catch块,默认异常处理程序中断程序的执行并且打印堆栈轨迹。JavaJava高级程序设计高级程序设计异常异常2.5 自定义异常与throw关键字throw关键字的使用:Throw语句的通常形式如下:throwThrowableInstance;这里,ThrowableInstance一定是Throwable类类型或Throwable子类类型的一个对象。注意:简单类型,例如int或char,以及非Throwable类,例如String或Object,不能用作异常。有两种可以获得Throwable对

19、象的方法:在catch子句中使用参数或者用new操作符创建。JavaJava高级程序设计高级程序设计异常异常2.6 throws与finally关键字throws关键字的使用:如果一个方法不能处理它自己所引发(throw)的代码,我们必须用关键字throws声明该方法可能引发的所有异常。主要是为了通知欲调用此方法的方法。由于该方法包含throw语句,所以要准备接受和处理它在运行过程中可能会抛出的异常。throws总是和方法说明出现在一起的。其形式如下:typemethod-name(parameter-list)throwsexception-list/bodyofmethodexceptio

20、n-list是该方法可引发的的异常列表以逗号分割。JavaJava高级程序设计高级程序设计异常异常2.6 throws与finally关键字throws关键字的使用注意事项:如果一个方法可以导致一个异常但不处理它,它必须指定这种行为以使方法的调用者可以保护它们自己而不发生异常做到这点你可以在方法声明中包含一个throws子句。一个throws子句列举了一个方法可能引发的所有异常类型。这对于除Error 或RuntimeException及它们子类以外类型的所有异常是必要的。一个方法可以引发的所有其他类型的异常必须在throws子句中声明。如果不这样做,将会导致编译错误。JavaJava高级程序

21、设计高级程序设计异常异常2.6 throws与finally关键字处理或声明规则:为了写出健壮的代码,Java编程语言要求,当一个方法在栈上发生Exception(它与Error或RuntimeException不同)时,那么,该方法必须决定如果出现问题该采取什么措施。程序员可以做满足该要求的两件事:第一:通过将Trycatch()块纳入其代码中,在这里捕获给被命名为属于某个超类的异常,并调用方法处理它。即使catch块是空的,这也算是处理情况。第二:让被调用的方法表示它将不处理异常,而且该异常将被抛回到它所遇到的调用方法中。它是按如下所示通过用throws子句标记的该调用方法的声明来实现的:

22、public void troublesome()throws IOExceptionJavaJava高级程序设计高级程序设计异常异常2.6 throws与finally关键字finally关键字的使用:在Java语言中,当异常抛出时,程序将跳出try块,执行try-catch语句块后面的程序代码,然而在某些情况下,我们希望无论异常发生还是被捕获时,有些语句必须执行。例如无论出现任何异常情况,我们都需要进行保存数据、关闭文件等操作。finally语句解决了这一问题,我们只需在try-catch语句块后接一个finally块,不管是否发生异常,都将执行finally块中的代码。JavaJava高

23、级程序设计高级程序设计异常异常2.7 Java的内置异常Java的内置异常:在标准包java.lang中,Java定义了若干个异常类。其中多数从RuntimeException派生的异常都自动可用,而且它们不需要通知所有欲调用此方法的方法来检查该异常,故不需要被包含在任何方法的throws列表中。这被叫做不受控的异常。因为编译器不检查它来看一个方法是否处理或引发了这些异常。java.lang定义的其他异常必须在方法的throws列表中包括,方法产生其中的某个异常但是不能自己处理它,这些叫做受控的异常。JavaJava高级程序设计高级程序设计异常异常2.7 Java的内置异常不受控的异常:Jav

24、aJava高级程序设计高级程序设计异常异常2.7 Java的内置异常不受控的异常:不受控异常的出现表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况,比如,数组索引不超出数组界限则ArrayIndexOutOfBoundsException异常从不会抛出。通常对它不做处理,会导致一个运行时错误信息。尽管编译器对于不受控异常没有捕获或者声明的强制要求,但知道可能发生这种异常时也应提供合适的异常处理代码。JavaJava高级程序设计高级程序设计异常异常2.7 Java的内置异常受控的异常:JavaJava高级程序设计高级程序设计异常异常小结使用异常:异常处理为控制具有很多动态运行时特性的复杂程序提供了一个强大的机制。把try,throw,和catch当成处理错误简洁及程序逻辑上的反常边界条件是很重要的。如果你像多数程序员一样,那么你可能习惯于在方法失败时返回一个错误代码。在你用Java编程时,你应该打破这个习惯。当方法可能失败时,引发一个异常。这是处理失败模式的一个更简洁的方法。JavaJava高级程序设计高级程序设计异常异常小结掌握:定义异常使用try、catch语句使用throw、throws和finally关键字理解:异常的分类了解:程序中引入异常机制的好处

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com