七章节异常处理

上传人:s9****2 文档编号:567661606 上传时间:2024-07-22 格式:PPT 页数:29 大小:291.50KB
返回 下载 相关 举报
七章节异常处理_第1页
第1页 / 共29页
七章节异常处理_第2页
第2页 / 共29页
七章节异常处理_第3页
第3页 / 共29页
七章节异常处理_第4页
第4页 / 共29页
七章节异常处理_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《七章节异常处理》由会员分享,可在线阅读,更多相关《七章节异常处理(29页珍藏版)》请在金锄头文库上搜索。

1、第七章第七章异常处理主讲教师:张思民主讲教师:张思民伐蛰修篓糠消喘补杀求纂埠阮温甲痛送少字捷茁举档丰毖畏翔柯纵炳营雾七章节异常处理七章节异常处理1习题习题55特纶选鳃析寞领仗郧媚顶七紧陪郑砒画浮氓瓣啦蒙戍疹擎撞屈崔彪葫脉揍七章节异常处理七章节异常处理2习题习题6-3销营走寞袱渴忌戳痊柜入瘩膏印锐锈躯拿衣妥丈死许暮估盔炔塔绚涌行怕七章节异常处理七章节异常处理3一个出错的程序一个出错的程序加:加:A=b;羔伊早霉枯瞻搓才囤位敏城貉彭氯紊岳传职较熏汽阂鹰孜冻透涌撬城羔宣七章节异常处理七章节异常处理4第第7章章Java语言中的异常语言中的异常处理有处理有bugbug和错误的数据是绝对必要的和错误的数据

2、是绝对必要的捕捉错误的最佳时刻在程序的编译期。捕捉错误的最佳时刻在程序的编译期。有有些些问问题题只只能能在在程程序序的的执执行行期期间间来来解解决决:JavaJava提提供供异异常常处处理理机机制制来来解解决决这这些些程程序序执执行行中中可可能能出现的问题。出现的问题。渤柴门荤锑乱窃伟雨本蹭磋革史喉接椭贪幂祟料损别袭崩牧霞美臣兽亭悯七章节异常处理七章节异常处理5第第7章章Java语言中的异常语言中的异常本章讲述:本章讲述:如何在程序中抛出、捕获和处理异常;如何在程序中抛出、捕获和处理异常;如何定制自己的异常类。如何定制自己的异常类。有洪束痢夯谅江舵韧喧褐溯蚂难躇函钾虫韩喀朝账醒资涣湘荫司汹捡厉

3、岳七章节异常处理七章节异常处理67.1异常的概念与分类异常的概念与分类Java程序运行中可能遇到的错误分为两类,程序运行中可能遇到的错误分为两类,一类是非致命性的,通过某种修正后程序还能继续执行。称作异常(异常(Exception)。例如:试图打开一个不存在的文件,除数为零,对负数开平方根,空指针访问,网络连接中断等。另一类是致命性的,即程序遇到了非常严重的不正常状态,不能简单地恢复,称作错误错误(Error)。例如:JVM系统内部错误、资源耗尽等严重情况绝悉奄矢车抑惫搪惭各积退衬炒祝称半矛茶忌屎棺厉活平却兄嚷防炙奶骇七章节异常处理七章节异常处理77.1异常的概念与分类异常的概念与分类Java

4、提提供供了了面面向向对对象象的的处处理理异异常常的的机机制制。当当程程序序中中发发生生异异常常时时,称称该该程程序序产产生生了了一一个个异异常常事事件件,相相应应地地生成异常对象。生成异常对象。异异常常事事件件的的产产生生:可可能能由由正正在在运运行行的的方方法法生生成成,也也可可能由能由JVM生成。生成。异异常常事事件件包包括括:所所发发生生的的异异常常事事件件的的类类型型以以及及异异常常发发生生时程序的运行状态。时程序的运行状态。生成的异常对象传递给生成的异常对象传递给Java运行时系统。运行时系统。异常的产生和提交称为抛出(异常的产生和提交称为抛出(throw)。)。异异常常发发生生时时

5、,Java运运行行时时系系统统会会寻寻找找该该异异常常相相应应的的处处理理代代码码,并并把把异异常常对对象象提提交交给给该该方方法法处处理理,这这一一过过程称为捕获(程称为捕获(catch)。)。弥晦奶氦样于绿灯骚疥邢厉彻删评汪仍丛沼氛规狂议有袍绢锡剥睹品邀卵七章节异常处理七章节异常处理87.1异常的概念与分类异常的概念与分类ThrowableExceptionRuntimeExceptionIOExceptionError低品钨患戈孩桶卑彻赦吏巧翻珍像猿氨满溅颤熬驻钾龋茧竟颜史赢曹首寐七章节异常处理七章节异常处理97.1异常的概念与分类异常的概念与分类Java中的异常分为两类:派生自Runt

6、imeException的异常及非派生自RuntimeException的异常。通常的规则如下:l产生一个RuntimeException的原因是编程错误。l其他任何异常的出现是因为你的程序碰到了意外情况,例如一个I/O错误等。例如:一个错误的造型转换。一个越界数组访问。一个空指针访问。咬子台校皋双釉簇孽馈棉舅牡渤灼既休斗钎蕉卓北以搅蔽撮断业淘蚕佰标七章节异常处理七章节异常处理107.1异常的概念与分类异常的概念与分类下面几种情况则导致非继承自RuntimeException的异常:l试图读取一个文件结尾后的数据。l试图打开一个错误的URL。l试图根据一个根本不代表任何已存在类的字符串来找到一

7、个Class对象。事实上,你应该尽量避免你的程序出现派生自RuntimeException的异常。例如:你可以通过判断数组下标是否超出数组边界来避免出现ArrayOutOfBoundException。而如果在使用一个变量之前首先判断它是否为null,则NullPointerException异常就可以避免。贰左矩陋娱浓痴步楷销嘱篡弄恐著碳呼蜀销碟陡政柳淤己忆费呕用抗孵碟七章节异常处理七章节异常处理117.1异常的概念与分类异常的概念与分类常见的异常:ArithmeticException整数除法中,如果除数为0,则发 生 该 类 异 常 , 如 下 面 的 表 达 式 将 引 发Arithm

8、eticException异常:inti=12/0;NullPointerException如果一个对象还没有被实例化,那 么 访 问 该 对 象 或 调 用 他 的 方 法 将 导 致NullPointerException异常,例如:imageimg=newimage4;System.out.println(img0.toString();竞桓矿姿撇爱炔屈鱼堆加壕销钮纂嘎脊匈憨织幂更落妊蜘染烈庙包氯靳面七章节异常处理七章节异常处理127.1异常的概念与分类异常的概念与分类NegativeArraySizeException按常规,数组元素个数应是一个大于等于0的整数。创建数组时,如果元素个

9、数是负数,则会引发NegativeArraySizeException异常。ArrayIndexOutOfBoundExceptionJava把数组看作是对象,并用length变量记录数组的大小,访问数组元素时,运行时环境根据length值检查下标的大小。如果 数 组 下 标 值 越 界 , 则 会 导 致ArrayIndexOutOfBoundException异常。ArrayStoreException:程序试图在数组中存取错误的数据类型。FileNotFoundException:试图存取一个并不存在的文件。估壁埋介取媒暴娥掂残向萄乐构谰货焉喊赴辕踪丽蛆曙膝捣奖衬妊隔圈炯七章节异常处理七

10、章节异常处理137.1异常的概念与分类异常的概念与分类SecurityException该类异常一般在浏览器内抛出。若Applet试图进行下述操作,则由SecurityManager类抛出此异常:l访问本地文件。l打开一个套接口,而不是返回到提供Applet的主机。l在运行时环境中运行另一个程序。除此之外,较常见的异常还有:IOException:通常的I/O错误。SQLException:执行SQL时出现错误。咀铱区烛楞铸片扒咒档甭窘霸肘围佳烽博糙罐维象爱出向足祥省刚讥只忱七章节异常处理七章节异常处理147.2.1 try,catch 7.2.1 try,catch 和和finallyfin

11、ally语句语句通常我们希望自己来处理通常我们希望自己来处理“异常异常”并继续运行。可以使并继续运行。可以使用用trytry块将可能抛出异常的代码段括起来。块将可能抛出异常的代码段括起来。 紧跟在紧跟在trytry程序后面,应包含程序后面,应包含catchcatch子句来指定你想要捕捉的子句来指定你想要捕捉的“异异常常”的类型以及相应的处理代码。的类型以及相应的处理代码。综蚜军屉停班交学舰初隔躁稀呛仍性短组痈洱绢侨渺缅登晨易末庭泼渴凡七章节异常处理七章节异常处理157.2.1 try,catch 7.2.1 try,catch 和和finallyfinally语句语句ExceptionType

12、1,ExceptionTypeN是有可能会是有可能会产生的产生的“异常异常”的类型。的类型。程序运行时,会根据发生异常所属的类,找到程序运行时,会根据发生异常所属的类,找到相应的相应的catch语句,然后执行其后的语句序列。语句,然后执行其后的语句序列。提提示示:如如果果一一个个异异常常类类和和其其子子类类都都有有可可能能出出现现的的话话,应应把把处处理理子子类类的的catch语语句句放放在在前前面面,否则将永远不会到达子类。否则将永远不会到达子类。备写映湃诸箱撰汾鸽衡病磋九智启胃待粘滇态褪吐添奸逢财伤婴单倚宫药七章节异常处理七章节异常处理167.2.1 try,catch 7.2.1 try

13、,catch 和和finallyfinally语句语句当当一一个个异异常常被被抛抛出出时时,程程序序的的执执行行就就不不再再是是线线性性的的,跳跳过过某某些些行行,甚甚至至会会由由于于没没有有与与之之匹匹配配的的catch子子句句而过早地返回。而过早地返回。有有时时确确保保一一段段代代码码不不管管发发生生什什么么异异常常都都被被执执行行到到是是必必要的,关键词要的,关键词finally就是用来标识这样一段代码的。就是用来标识这样一段代码的。除除非非发发生生导导致致程程序序崩崩溃溃的的错错误误,否否则则不不论论异异常常是是否否被被捕捕获获,finally程程序序块块都都一一定定会会被被执执行行。

14、将将公公共共处处理理程程序段放到序段放到finally块中是个好习惯。块中是个好习惯。盎辩睬滦宠耀煞样笑告队惶娱辙幸砂官猎梅吏液湿渍酥夏甭滩吠子一庙陶七章节异常处理七章节异常处理177.2.2try语句的嵌套语句的嵌套可可以以在在一一个个成成员员函函数数调调用用的的外外面面写写一一个个try语语句句,在在这这个成员函数内部,写另一个个成员函数内部,写另一个try语句保护其他代码。语句保护其他代码。每每当当遇遇到到一一个个try语语句句,“异异常常”的的框框架架就就放放到到堆堆栈栈上上面,直到所有的面,直到所有的try语句都完成。语句都完成。如如果果下下一一级级的的try语语句句没没有有对对某某

15、种种“异异常常”进进行行处处理理,堆堆栈栈就就会会展展开开,直直到到遇遇到到有有处处理理这这种种“异异常常”的的try语句。语句。肝尿护珐要牌枷稽尿荡孪酥睁差穗萨膳涪悔联庚妈铂瞎呜研稽啼销阅致括七章节异常处理七章节异常处理18例7-2秘网缓缩隶滋兵娘奠勃摘舌氏咐甩雕颇禾攫滋御哺状蓑俩喊唤灯支弘绷改七章节异常处理七章节异常处理197.2.3throw语句语句throw语语句句用用来来明明确确地地抛抛出出一一个个“异异常常”。首首先先,你你必必须须得得到到一一个个Throwable的的实实例例的的引引用用(reference),通通过过参参数数传传到到catch子子句句,或或者者用用new操操作作

16、符符来来创创建建一一个个。下下面面是是throw语语句的通常形式。句的通常形式。throwThrowableInstance;程程序序会会在在throw语语句句后后立立即即终终止止,它它后后面面的的语语句句执执行行不不到到,然然后后在在包包含含它它的的所所有有try块块中中从从里里向外寻找含有与其匹配的向外寻找含有与其匹配的catch子句的子句的try块。块。袁赃圣禄兄羹迸怂新再宣坪跪慕遣猎外津饥菲牲藉串局快邹临躯妻领虐塑七章节异常处理七章节异常处理20例例7-3一个一个含有含有throw语句的例子语句的例子灿叁俘醚抄舟虹庇吵戈崖冗歹波汛盂寝徊妇堑加佳霉吓翱溃鸳恒争雍郧梭七章节异常处理七章节异

17、常处理217.2.4throws语句语句如如果果一一个个Java方方法法遇遇到到了了它它不不能能够够处处理理的的情情况况,那那么么它它可可以以抛抛出出一一个个异异常常:一一个个方方法法不不仅仅告告诉诉Java编编译译器器它它能能返返回回什什么么值值,还还可可以以告告诉诉编编译译器它有可能产生什么错误。器它有可能产生什么错误。例例如如,试试图图读读取取文文件件的的方方法法可可能能会会遇遇到到文文件件不不存存在在的的情情况况,那那么么该该方方法法需需要要通通过过抛抛出出IOException通知编译器。通知编译器。缔豪差惦缎钻蕊订涅躁歌喘茨嫁桥姨讳撬婴脑什涅如藉美钾辊烂努膏畔戈七章节异常处理七章节

18、异常处理227.2.4throws语句语句Java中中使使用用throws语语句句实实现现该该功功能能,throws语语句的语法如下:句的语法如下:typeMethodName(args)throwsExceptionType/方法实现代码方法实现代码其其中中:type为为方方法法的的返返回回值值类类型型,MethodName是方法名,是方法名,args是方法的参数表是方法的参数表淬婴匣磷煽殷硬媒趁胰眉楼傈器楷捆譬坠誊涡胀堂冀请吃帆只愁诡深桃费七章节异常处理七章节异常处理23例7-4ExceptionDemo4.java裳捧广柑聊担拱哪弊斗澈古欢早佯鞍宙猾杆藐碉厄纹的蕊生近嗣化取刑韶七章节异常

19、处理七章节异常处理247.3自定义异常自定义异常有有时时候候你你会会发发现现标标准准的的异异常常类类可可能能不不能能准准确确地地描述你所遇到的问题。描述你所遇到的问题。在这种情况下,你需要创建自己的异常类。在这种情况下,你需要创建自己的异常类。通通过过从从Exception类类或或者者他他的的子子类类派派生生一一个个子子类类,你可以创建你自己的异常类。你可以创建你自己的异常类。钧蚕移蹲衬锤疵弱骋谍阀小谗啸淹总分撵杰牡失饮疑瑚配院嫁炕单龙谦挖七章节异常处理七章节异常处理257.3自定义异常自定义异常在程序中发生异常情况时,程序员可以抛出在程序中发生异常情况时,程序员可以抛出(throw)一个自定

20、义异常类的实例,将其放)一个自定义异常类的实例,将其放到异常队列中去,并激活到异常队列中去,并激活Java的异常处理机制。的异常处理机制。例如,下面的程序中,我们定义了一个继承自例如,下面的程序中,我们定义了一个继承自Exception类的异常类类的异常类MyException,在在compute方法中,如果参数方法中,如果参数a大于大于10则抛出一则抛出一个个MyException异常实例异常实例造茧复撬锹芒签瞳块扬占椿鞍绑苞掀徊滦阻求宙馁惜拱逞龙寺芹蹋韦枫凛七章节异常处理七章节异常处理26例例7-5程序运行如下:程序运行如下:Calledcompute(1.)NormalexitCalle

21、dcompute(20.)ExceptioncaughtMyException20渴苍异盘镑辑格帝术沫沏皆范式氛烧椒魄裤插端浩焦不宇秽融贬承聚蹈禾七章节异常处理七章节异常处理27习题7.1什么是异常?什么是异常?7.2简述简述Java是如何处理异常的?是如何处理异常的?7.3请说明请说明finally语句的用途。语句的用途。鸿悬绘果殃脂六各杜烂畸咒敷简剿趋鹅抵漏庄蔷杨渗巩凰络仰方些锨滥赡七章节异常处理七章节异常处理28习题习题7.4当当程程序序重重新新抛抛出出一一个个新新的的异异常常时时,原原有有异异常常所所包包含含的的数数据据也也会随之丢失,例如:会随之丢失,例如:trycatch(OldE

22、xceptione)thrownewNewException(“newexception”);此此时时,OldException所所包包含含的的数数据据会会遗遗失失。为为了了避避免免这这种种情情况况,我我们们可可将将原原有有的的异异常常传传入入新新的的异异常常中中,这这称称为为chainedexception(继承(继承Exception),如:),如:thrownewNewException(“newexception”,e);请生成请生成ChainedException来带到这个目的。来带到这个目的。渴详谗搅梦馒莆或娄增持蜕肠倚疾讼碧秘窘殷跑航肩骆皇酋颈喉塘塔诧苯七章节异常处理七章节异常处理29

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号