SUN_JAVA 培训专用教材C0715612.docx

上传人:you****now 文档编号:68737970 上传时间:2022-12-29 格式:DOCX 页数:12 大小:494.44KB
返回 下载 相关 举报
SUN_JAVA 培训专用教材C0715612.docx_第1页
第1页 / 共12页
SUN_JAVA 培训专用教材C0715612.docx_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《SUN_JAVA 培训专用教材C0715612.docx》由会员分享,可在线阅读,更多相关《SUN_JAVA 培训专用教材C0715612.docx(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第七章 异 常常本模块讲述述建立在JJava编编程语言中中的错误处处理装置。第一节 相关问题题讨论下述述问题与本本模块中的的材料相关关:- 在大部分编编程语言中中,如何解解决运行时时错误?第二节 目 的的本模块学习习结束后,能能够:- 定义异常- 使用tryy,cattch和finaally语语句- 描述异常分分类- 开发程序来来处理自己己的异常第三节 异 常异 常异常类定义义程序所遇遇到的轻微微错误发生下列情情况时,会会出现异常常:想打开的文文件不存在在网络连接中中断受控操作数数超出预定定范围非常感兴趣趣地正在装装载的类文文件丢失错误类定义义严重的错错误条件7.3.11介绍什么是异常常?在J

2、aava编程程语言中,异异常类定义义程序中可可能遇到的的轻微的错错误条件。可可以写代码码来处理异异常并继续续程序执行行,而不是是让程序中中断。在程序执行行中,任何何中断正常常程序流程程的异常条条件就是错错误或异常常。例如,发发生下列情情况时,会会出现异常常:- 想打开的文文件不存在在- 网络连接中中断- 受控操作数数超出预定定范围- 非常感兴趣趣地正在装装载的类文文件丢失 在在Javaa编程语言言中,错误误类定义被被认为是不不能恢复的的严重错误误条件。在在大多数情情况下,当当遇到这样样的错误时时,建议让让程序中断断。 JJava编编程语言实实现C+异常来帮帮助建立弹弹性代码。在在程序中发发生错

3、误时时,发现错错误的方法法能抛出一一个异常到到其调用程程序,发出出已经发生生问题的信信号。然后后,调用方方法捕获抛抛出的异常常,在可能能时,再恢恢复回来。这这个方案给给程序员一一个写处理理程序的选选择,来处处理异常。通过浏览AAPI,可可以决定方方法抛出的的是什么样样的异常。7.3.22实例考虑一下HHellooWorlld.jaava程序序版本的简简单扩展,它它通过信息息来循环:1. publiic cllass HellloWorrld 2. pubblic stattic vvoid mainn (Sttringg arggs) 3. iint ii = 00; 4.5. SStrinn

4、g grreetiings = 6. Heello worlld!,7. Noo, I meann it!,8. HEELLO WORLLD!9. ;10.11. wwhilee (i javaa HellloWoorld2. Helloo worrld!3. No, II meaan itt!4. HELLOO WORRLD!5. java.langg.ArrrayInndexOOutOffBounndsExxcepttion: 36. aat HeelloWWorldd.maiin(HeelloWWorldd.javva:122) 异常处理允允许程序捕捕获异常,处处理它们,然然后继续程程序

5、执行。它它是分层把把关,因此此,错误情情况不会介介入到程序序的正常流流程中。特特殊情况发发生时,在在与正常执执行的代码码分离的代代码块中被被处理。这这就产生了了更易识别别和管理的的代码。第四节 异常处理理Java编编程语言提提供了一个个来考虑哪哪个异常被被抛出以及及如何来恢恢复它的机机制。7.4.11 trry和catcch语句try和ccatchh语句1. tryy 2. / coode tthat mighht thhrow a paarticcularr excceptiion3. ccatchh (MyyExceeptioonTyppe e) 4. / coode tto exxecu

6、tte iff a MMyExcceptiionTyype eexcepptionn is throown 5. ccatchh (Exxcepttion e) 6. / codde too exeecutee if a geeneraal Exxcepttion exceeptioon iss thrrown 7. 要处理特殊殊的异常,将将能够抛出出异常的代代码放入ttry块中中,然后创创建相应的的catcch块的列列表,每个个可以被抛抛出异常都都有一个。如如果生成的的异常与ccatchh中提到的的相匹配,那那么cattch条件件的块语句句就被执行行。在trry块之后后,可能有有许多caat

7、ch块块,每一个个都处理不不同的异常常。1. ttry 2. / codee thaat miight throow a partticullar eexcepptionn3. cattch (MyExxcepttionTType e) 4. / codee to execcute if aa MyEExcepptionnTypee excceptiion iis thhrownn 5. cattch (Exceeptioon e) 6. / ccode to eexecuute iif a geneeral Exceeptioon exxcepttion is tthrowwn 7. 7.4

8、.22 调用用栈机制如果方法中中的一个语语句抛出一一个没有在在相应的ttry/ccatchh块中处理理的异常,那那么这个异异常就被抛抛出到调用用方法中。如如果异常也也没有在调调用方法中中被处理,它它就被抛出出到该方法法的调用程程序。这个个过程要一一直延续到到异常被处处理。如果果异常到这这时还没被被处理,它它便回到mmain(),而且且,即使mmain()不处理理它,那么么,该异常常就异常地地中断程序序。考虑这样一一种情况,在在该情况中中mainn()方法法调用另一一个方法(比比如,fiirst()),然然后它调用用另一个(比比如,seecondd())。如如果在seecondd()中发发生异常

9、,那那么必须做做一个检查查来看看该该异常是否否有一个ccatchh;如果没没有,那么么对调用栈栈(firrst())中的下下一个方法法进行检查查,然后检检查下一个个(maiin())。如如果这个异异常在该调调用栈上没没有被最后后一个方法法处理,那那么就会发发生一个运运行时错误误,程序终终止执行。7.4.33 fiinallly语句finallly语句句1. try 2. staartFaaucett();3. watterLaawn();4. 5. finallly 6. stoopFauucet();7. ffinallly语句句定义一个个总是执行行的代码块块,而不考考虑异常是是否被捕获获。

10、下述样样板代码来来自Fraank YYelliin弗兰克克叶林的白白皮书JJava中中的低级安安全:1. try 2. staartFaaucett();3. watterLaawn();4. 5. finallly 6. stoopFauucet();7. 在前面的例例子中,即即使异常在在打开开关关或给草地地浇水时发发生,开关关也能被关关掉。trry 后面面的括号中中的代码被被称做保护护码。如果终止程程序的Syystemm.exiit()方方法在保护护码内被执执行,那么么,这是ffinallly语句句不被执行行的唯一情情况。这就就暗示,控控制流程能能偏离正常常执行顺序序,比如,如如果一个rr

11、eturrn语句被被嵌入trry块内的的代码中,那那么,fiinallly块中的的代码应在在retuurn前执执行。7.4.44重访前例例下面的例子子是第1669页mainn()方法法的重写。本本程序以前前的版本中中产生的异异常被捕获获,数组索索引重新设设定,使下下述程序继继续运行。1. publiic sttaticc voiid maain (Striing aargs) 2. intt i = 0;3. Strring greeetinggs = 4. Helllo woorld!,5. No, I meean iit!,6. HELLLO WOORLD!7. ;8. whiile (i

12、 4) 9. ttry 10. SSysteem.ouut.prrintlln (ggreettingssi);11. cattch (ArraayInddexOuutOfBBounddsExcceptiion ee)12. SSysteem.ouut.prrintlln( Re-ssettiing IIndexx Vallue);13. ii = -1;14. finnallyy 15. SSysteem.ouut.prrintlln(TThis is aalwayys prrinteed);16. 17. ii+;18. / end whille()19. / end mainn() 当循

13、环被执执行时,下下述在屏幕幕上出现的的信息将改改变。1. Helloo worrld!2. This is aalwayys prrinteed3. No, II meaan itt!4. This is aalwayys prrinteed5. HELLOO WORRLD! 6. This is aalwayys prrinteed7. Re-seettinng Inndex Valuue 8. This is aalwayys prrinteed 第五节 异常分类类在Javaa编程语言言中,异常常有三种分分类。Jaava.llang.Throowablle类充当当所有对象象的父类,可可以使

14、用异异常处理机机制将这些些对象抛出出并捕获。在在Throowablle类中定定义方法来来检索与异异常相关的的错误信息息,并打印印显示异常常发生的栈栈跟踪信息息。它有EErrorr和Exceeptioon两个基基本子类,如如下图所示示:Throwwablee类不能使使用,而使使用子类异异常中的一一个来描述述任何特殊殊异常。每每个异常的的目的描述述如下:- Errorr表示恢复复不是不可可能但很困困难的情况况下的一种种严重问题题。比如说说内存溢出出。不可能能指望程序序能处理这这样的情况况。- RuntiimeExxcepttion表表示一种设设计或实现现问题。也也就是说,它它表示如果果程序运行行正

15、常,从从不会发生生的情况。比比如,如果果数组索引引扩展不超超出数组界界限,那么么,ArrrayInndexOOutOffBounndsExxcepttion异异常从不会会抛出。比比如,这也也适用于取取消引用一一个空值对对象变量。因因为一个正正确设计和和实现的程程序从不出出现这种异异常,通常常对它不做做处理。这这会导致一一个运行时时信息,应应确保能采采取措施更更正问题,而而不是将它它藏到谁也也不注意的的地方。- 其它异常表表示一种运运行时的困困难,它通通常由环境境效果引起起,可以进进行处理。例例子包括文文件未找到到或无效UURL异常常(用户打打了一个错错误的URRL),如如果用户误误打了什么么东

16、西,两两者都容易易出现。这这两者都可可能因为用用户错误而而出现,这这就鼓励程程序员去处处理它们。第六节 共同异常常共同异常- ArithhmetiicExcceptiion- NullPPointterExxcepttion- NegattiveAArrayySizeeExceeptioon- ArrayyIndeexouttofBooundssExceeptioon- SecurrityEExcepptionn JJava编编程语言提提供几种预预定义的异异常。下面面是可能遇遇到的更具具共同性的的异常中的的几种:- ArithhmetiicExcceptiion整数被0除,运算算得出的结结果。

17、- int II =122 / 00;- NullPPointterExxcepttion当对象没没被实例化化时,访问问对象的属属性或方法法的尝试:- Date d= nnull;- Systeem.ouut.prrintlln(d.toSttringg();- NegattiveAArrayySizeeExceeptioon创建带负负维数大小小的数组的的尝试。- ArrayyIndeexouttofBooundssExceeptioon访问超过过数组大小小范围的一一个元素的的尝试。- SecurrityEExcepptionn典型地被被抛出到浏浏览器中,SecurityManager类将抛出

18、applets的一个异常,该异常企图做下述工作(除非明显地得到允许):- 访问一个本本地文件- 打开主机的的一个soockett,这个主主机与服务务于appplet的的主机不是是同一个。- 在运行时环环境中执行行另一个程程序第七节 处理或声声明规则处理或声明明规则- 用try-catcch-fiinallly块来处处理异常- 使用thrrows子子句声明代代码能引起起一个异常常为了写出健健壮的代码码,Javva编程语语言要求,当当一个方法法在栈(即即,它已经经被调用)上上发生Exxcepttion(它它与Errror或RunttimeEExcepptionn不同)时时,那么,该该方法必须须决定

19、如果果出现问题题该采取什什么措施。程序员可以以做满足该该要求的两两件事:第一,通过过将Tryycattch()块纳入入其代码中中,在这里里捕获给被被命名为属属于某个超超类的异常常,并调用用方法处理理它。即使使catcch块是空空的,这也也算是处理理情况。第二,让被被调用的方方法表示它它将不处理理异常,而而且该异常常将被抛回回到它所遇遇到的调用用方法中。它它是按如下下所示通过过用thrrows子子句标记的的该调用方方法的声明明来实现的的: publlic vvoid trouublessome() thhrowss IOEExcepptionn关键字thhrowss之后是所所有异常的的列表,方方

20、法可以抛抛回到它的的调用程序序中。尽管管这里只显显示了一个个异常,如如果有成倍倍的可能的的异常可以以通过该方方法被抛出出,那么,可可以使用逗逗号分开的的列表。是选择处理理还是选择择声明一个个异常取决决于是否给给你自己或或你的调用用程序一个个更合适的的候选的办办法来处理理异常。注由于异异常类象其其它类一样样被组编到到层次中,而而且由于无无论何时想想要使用超超类都必须须使用子类类,因此,可可以捕获异异常“组”并以相同同的捕获代代码来处理理它们。例例如,尽管管IOExxcepttionss(EOFEExcepptionn,FilleNottFounndExcceptiion等等等)有几种种不同的类类

21、型,通过过俘获IOOExceeptioon,也可可以捕获IIOExcceptiion任何何子类的实实例。第八节 创建自己己的异常7.8.11介绍用户定义异异常是通过过扩展Exxcepttion类类来创建的的。这种异异常类可以以包含一个个“普通”类所包含含的任何东东西。下面面就是一个个用户定义义异常类例例子,它包包含一个构构造函数、几几个变量以以及方法:1. publiic cllass ServverTiimedOOutExxcepttion exteends Exceeptioon 2. pprivaate SStrinng reeasonn;3. pprivaate iint pport;

22、4. ppubliic SeerverrTimeedOuttExceeptioon (SStrinng reeasonn,intt porrt) 5. thiis.reeasonn = rreasoon;6. thiis.poort = porrt;7. 8. ppubliic Sttringg gettReasson() 9. rreturrn reeasonn;10. 11. ppubliic innt geetPorrt() 12. retturn portt;13. 14. 使用语句来来抛出已经经创建的异异常:throww neww SerrverTTimeddOutEExceppti

23、onn(Couuld nnot cconneect, 80);7.8.22实例考虑一个客客户服务器器程序。在在客户代码码中,要与与服务器连连接,并希希望服务器器在5秒钟内响响应。如果果服务器没没有响应,那那么,代码码就如下所所述抛出一一个异常(如如一个用户户定义的SServeerTimmedOuutExcceptiion)。1. ppubliic vooid cconneectMee(Strring servverNaame) throows ServverTiimedOOutExxcepttion 2. int ssucceess;3. int pportTToConnnectt = 880

24、;4. succeess = opeen(seerverrNamee, poortTooConnnect);5. if (ssucceess = -11) 6. throww neww SerrverTTimeddOutEExcepptionn(7. Coulld noot coonnecct, 80);8. 9. 要捕获异常常,使用ttry语句句:1. publiic vooid ffindSServeer() 2. . . .3. try 4. conneectMee(deffaulttServver);5. cattch(SServeerTimmedOuutExcceptiion ee)

25、 6. Systeem.ouut.prrintlln(SServeer tiimed out, tryying alteernatte);7. try 8. conneectMee(altternaateSeerverr);9. cattch (ServverTiimedOOutExxcepttion e1) 10. Systeem.ouut.prrintlln(NNo seerverr currrenttly aavaillablee);11. 12. 13. . .注tryy和catcch块可以以如前例所所述那样被被嵌套。也可能部分分地处理一一个异常然然后也将它它抛出。如如:try . c

26、attch (ServverTiimedOOutExxcepttion e) Sysstem.out.prinntln(Errror ccaughht ); thrrow ee;练习:处理理并创建异异常练习目的通过编写写可以创建建并处理异异常的Jaava软件件程序,可可以获得异异常机制的的经验。一、准备为了成功地地完成该实实验,必须须理解处理理运行时错错误的异常常的概念。二、任务一级实验:处理一个个异常 11. 使用用第1699页上的样样板异常程程序在数组组索引超出出数组大小小时创建一一个异常。(或或修改自己己的程序以以便创建一一个异常。) 22. 使用用try和catcch语句从从异常进行行

27、恢复。二级实验:创建自己己的异常使用模块55中创建的的bankk包并附加加下述异常常:AccouuntOvverdrrawnEExcepptionn当有了这这个要取出出比帐户上上更多的钱钱的尝试时时。InvallidDeeposiitExcceptiion当无效钱钱数(小于于0)存入时时。三、练习总总结讨论花几几分钟时间间讨论实验验练习中所所取得的经经验、问题题或发现。l 经验 解解释 总结结 应用四、检查进进步情况在继续下一一个模块前前,检查一一下,确信信能够:- 定义异常- 使用tryy,catcch和finaally语语句- 描述异常分分类- 确认共同异异常- 开发程序来来处理自己己的异常五、思考Java应应用环境有有什么特征征,使它支支持用户界界面的开发发?107

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

当前位置:首页 > 管理文献 > 管理工具

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁