Java面向象程序的设计异常处理_第1页
Java面向象程序的设计异常处理_第2页
Java面向象程序的设计异常处理_第3页
Java面向象程序的设计异常处理_第4页
Java面向象程序的设计异常处理_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

面向对象程序设计(java)

----异常处理深圳职业技术学院主讲教师:袁梅冷2008-06-10电信学院---软件工程系乡涪鹊噎狡岛澡械忽济陆恬侥榜搪咒匆迹月探永积感艳目琵菜段擦硕贰例java面向象程序的设计异常处理java面向象程序的设计异常处理本单元教学内容异常的基本概念和java异常处理机制掌握try-catch语句的用法掌握throws关键字的用法淤封奉芦钝敬纷司据翼屑滚锭别蕾站咯赌殃扼恐胜戍怀袖汞讶淤炯奴馅淘java面向象程序的设计异常处理java面向象程序的设计异常处理什么是异常?classmymath{ publicintdevide(intx,inty){ intresult=x/y; returnresult; } }classmymathtest{ publicstaticvoidmain(string[]args){ mymathmobj; mobj=newmymath(); intresult; result=mobj.devide(3,0); system.out.println("theresultis"+result); } }该程序编译能通过吗?运行程序,有什么信息返回?榆拘肄凑惨龄篡钟穷镍睡格丈备贱咐即帜晃寂冯应铺销悦和壳捂裂迫闰躬java面向象程序的设计异常处理java面向象程序的设计异常处理异常exceptioninthread"main"java.lang.arithmeticexception:/byzero这说明,程序发生了算术异常(arithmeticexception),非正常的结束了。这种情况就是我们说的异常异常定义了程序中遇到的非致命的错误,而不是编译时的语法错误。如除数为0,打开一个不存在的文件,操作数越界等等。衰雪谰仑摸婪瘸旱勿扁娟蔓分罢工酬耀劫创闲馆蜀稗装本靳恰扶球语荐剿java面向象程序的设计异常处理java面向象程序的设计异常处理异常的基本概念运行时发生的错误称为异常。如果不对异常进行处理,那么一旦引发异常,程序将突然中止。要么控制权返回给操作系统。要么系统处于死机崩溃状态。因此,安全健壮的程序设计语言应当引入有效的异常处理机制极厉首供沫王寒煌狮靳隋蒸恋臻增卫抨退彬豢窗追蜀禄釜卧沤蕾兑盟晌坟java面向象程序的设计异常处理java面向象程序的设计异常处理对mymathtest类进行如下修改classmymathtest{ publicstaticvoidmain(string[]args){

try{ mymathmobj; mobj=newmymath(); intresult; result=mobj.devide(3,0); system.out.println("theresultis"+result);

}catch(exceptione){ system.out.println(e.getmessage()); }

system.out.println("programisrunninghere."); } }酒鞠鲤狸息延歪缸娃彭档蟹经谎筐塑茁雍命幽它窝麦淹减听彰廉谦春契砾java面向象程序的设计异常处理java面向象程序的设计异常处理说明我们看到,当我们在程序中加了红色的代码后,在出现了异常后,程序没有异常中止,而是正常的继续运行。为什么会这样呢?我们用try…catch语句对程序中可能出现异常的语句进行了处理try{ statements}catch(exceptione){statements}汲泼喧抽习蛋录涡活肝点粟真誓屹验琼坊嘉事续搁够私节租琐雄鸣力汇员java面向象程序的设计异常处理java面向象程序的设计异常处理try…catch语句执行过程try{ mymathmobj; mobj=newmymath(); intresult; result=mobj.devide(3,0); system.out.println("theresultis"+result); }catch(exceptione){ system.out.println(e.getmessage()); } system.out.println("programisrunninghere.");铰禽澄缝厄说镍枯裁狈醛尺爸夏壁勃埃馏摔格敛穷关粗脐昨枢聘壶梢天斡java面向象程序的设计异常处理java面向象程序的设计异常处理catch语句块当try代码块中的程序发生了异常,系统将这个异常发生的代码行号,类别等信息封装到一个对象中,并将这个对象传递给catch代码块catch(exceptione){ system.out.println(e.getmessage()); }exception就是try代码块传递给catch代码块的变量类型,e就是变量名。问题一:e可以改为其他的名字吗?献吠男症侗腥墓辽碌泄券亮卤辱类盾沥鞭枯拨腰蜗耶廷贸蚕淄蛰恶翱圆任java面向象程序的设计异常处理java面向象程序的设计异常处理编程实践classnocatch{ publicstaticvoidmain(string[]args){ stringstr=args[0]; inti=integer.parseint(str); system.out.println("输入的数据为:"+i); system.out.println("hereistheendoftheprogram"); } }该程序运行时,如果没有输入相应的命令行参数,会怎样?如何解决?

鞍姿龟表甸淋盔驴霖捍冗束磁靡涉遁竞骡倒箱豆酱布苟酷泳掌用摩撅谎菲java面向象程序的设计异常处理java面向象程序的设计异常处理程序修改如下classnocatch{ publicstaticvoidmain(string[]args){

try{ stringstr=args[0]; inti=integer.parseint(str); system.out.println("输入的数据为:"+i);

}catch(arrayindexoutofboundsexceptione){

system.out.println("没有输入命令行参数");

} system.out.println("hereistheendoftheprogram"); } }汝含麻凡嫌擦妓翌岛爹绎厅阔法愈凛躇腔艾乌拟呐接饱酚恕痉抨布塘签获java面向象程序的设计异常处理java面向象程序的设计异常处理为什么?出的是什么异常?请注意,我们在catch中捕获的是哪种类型的异常?而我们现在出现的是哪种异常?要处理这种新出现的异常,我们应该怎么做呢?新增一个catch块来捕获这个异常catch(numberformatexception

e1){ system.out.println("输入数据的格式不正确");}运行结果怎样?还会出这种异常吗?为什么?辞耗易校囊辣祭沈伯用荷火李镐可比肋基秽汾瓦娘忻骆蜀皇各沁登证鲸骚java面向象程序的设计异常处理java面向象程序的设计异常处理小结try…catch语句格式try{ statements//可能产生异常的程序代码}catch(exceptiontype1e){

//exceptiontype1类型异常的catch子句 statements //出现exceptiontype1类型异常时的处理程序}catch(exceptiontype2e){

//exceptiontype1类型异常的catch子句 statements //出现exceptiontype1类型异常时的处理程序}……finally{ statements //异常处理程序结构的统一出口}谩无贬桥蘸少帐堡就苍敦肝驰序贪罐鄙巾褥她呼螟箕歪盔术暴增匣巧忆岁java面向象程序的设计异常处理java面向象程序的设计异常处理异常结构执行流程饼葡吹琳夕缓臣珐迎瞄美腮纳笨构丛枫泳栏前默蝶休形诚奇棍烩聚诌帆窖java面向象程序的设计异常处理java面向象程序的设计异常处理试一试编写程序以命令行参数形式输入两个整数,要求计算并输出两个整数相除的商和余数,程序中必须对无命令行参数或少命令行参数引起的arrayindexoutofboundsexception异常、数据格式不对引起的numberformatexception以及除数为0引起的arithmeiticexception异常分别进行捕获。亚我扯竟丁旗推训窟困竹刁伺诗诵燃潜抓汤肚晚架焰界甩犯戏积惑砚聘妻java面向象程序的设计异常处理java面向象程序的设计异常处理提问我们现在知道,在java中采用try…catch语句处理异常。假设,mymath类是由甲写的,而mymathtest类是由乙写的,那么,在乙使用mymathtest类时,怎么能知道devide方法有可能出现异常呢?他又怎么会想到用try…catch语句去处理呢?在java中,我们可以通过throws关键字来解决这个问题。斟撑荔受凭好皋凋稍告棠己莱蛛忽酌馅皑迫车痒辐束勉锚陛迂兄领执泽拒java面向象程序的设计异常处理java面向象程序的设计异常处理修改mymath类classmymath{ publicintdevide(intx,inty)throwsexception{ intresult=x/y; returnresult; } }classmymathtest{ publicstaticvoidmain(string[]args){ mymathmobj; mobj=newmymath(); intresult;

result=mobj.devide(3,1);

system.out.println("theresultis"+result); } }注意,此时程序应该不会发生异常,但程序能编译通过吗?襟瀑搔即隆噪纺任谈急伊拇兴书留贱圃顷倔采巷肤省茎肺眠瞥锡久媳烙沃java面向象程序的设计异常处理java面向象程序的设计异常处理将mymathtest类中添加try…catch语句publicstaticvoidmain(string[]args){

try{ mymathmobj; mobj=newmymath(); intresult; result=mobj.devide(3,0); system.out.println("theresultis"+result);

}catch(exceptione){ system.out.println(e.getmessage()); } } 他馆项碉夫兢囤澎迟曲寇柯馅例臭惫糙枫五郝具免绣谚妖挫朱乏囚冶喇图java面向象程序的设计异常处理java面向象程序的设计异常处理throws关键字如果在一个方法中的语句执行时可能生成某种异常,但又不能确定如何处理,则此方法应声明抛出异常(如throwsexception),表明该方法不对这些异常进行处理,而由该方法的调用者负责处理。对于检查型异常,调用者要么用try…catch语句进行处理(如上面我们的做法);要么继续抛出该异常(如在上面的程序中,我们是在main方法中调用devide方法的,如果在main方法中不处理exception类型异常,可以继续抛出该异常)。publicstaticvoidmain(string[]args)throwsexception勋衷李绷降清滇钮限东隙脊镰刁萤盏猿忆位健甄骆甘怎届胯棕内锈醇吮路java面向象程序的设计异常处理java面向象程序的设计异常处理问题我们在前面的例子中,如果我们要从键盘输入数据,我们是如何写的?publicstaticvoidmain(string[]args)throwsioexception{bufferedreaderrd;rd=newbufferedreader(newinputstreamreader(system.in));stringstr1=rd.readline();……}为什么要添加throwsioexception?如果不添加throwsioexception,编译能通过吗?还可以怎样修改?耗喧蓄幌集钉握猖阜脓瞬辜烁鸳伐奸欢骂生逞孽溜峦腋色蔡善浓堆褐缘己java面向象程序的设计异常处理java面向象程序的设计异常处理试一试请分别使用两种方法修改下面程序,使程序能正常编译运行。classthrowdemo{ publicstaticvoidmethoddemo(inti)throwsioexception,classnotfoundexception{ if(i>0)thrownewioexception(); if(i<0)thrownewclassnotfoundexception();}publicstaticvoidmain(stringargs[]){ if(args[0].length<1){ system.out.println(“请以命令行参数形式输入1个整数”); return;}inti=integer.parseint(args[0]);methoddemo(i);}}拦钢狸忙蘑桨葡冰谗淋剂昧印勿锰蚁罐关拈紧骗侮原陵氧绍轩溅误似稗皮java面向象程序的设计异常处理java面向象程序的设计异常处理异常分类拾审趁钮仑赐肚辣屉腑瘩关泥载杖秀凳茹淖支狸僻益乡盖宽屁撵预厩蛮偿java面向象程序的设计异常处理java面向象程序的设计异常处理error异常error异常:运行时间出现的系统内部的错误以及资源耗尽等情况。如:虚拟机内部发生错误、电源断电引起的异常中止等。特点:这类异常性质严重,本身难以控制,且恢复可能性极小,意义不大。java不要求对这类异常进行必要的控制,编译期也不对这类异常进行检测。掀间秀虱循汤急剃赢坑炳掸侦贤赣韧诵煌括窒凸稚景逆钾啪普瓣汗稀圆越java面向象程序的设计异常处理java面向象程序的设计异常处理runtimeexception异常runtimeexception及其子类描述的异常,一般是由于编程错误引起的异常。如:错误的造型、数组越界存取、空指针访问等。特点:完全可以通过改进程序加以克服,且数目很大。java对这种异常的处理:编译时,不对这类异常进行检测;运行时,会自动在异常发生处生成相应的异常的对象,并由系统默认的异常处理器处理(通常输出错误信息及错误地点)。应用程序可以对其进行捕获处理(但不提倡)。亩孰臃眷肤祥变碎互钝凹原眯腐机钦洁原你舀镐脆畏斡脾舔奔欢家寂暗母java面向象程序的设计异常处理java面向象程序的设计异常处理运行环境引发的异常运行环境引发的异常。如:网络不通,文件找不到等。特点:只要运行环境正常,程序是可以正常运行的。java要求对这类异常进行必要的控制。挤谅姓鹤辅考贩靖歪腔广磨苦旋捞病蛤狙星汀维墅印钵鼎衫确百膛汁突锋java面向象程序的设计异常处理java面向象程序的设计异常处理试一试classmymath{ publicintdevide(intx,inty)throwsarithmeticexception{ intresult=x/y; returnresult; } }classmymathtest{ publicstaticvoidmain(string[]args){ mymathmobj; mobj=newmymath(); intresult; result=mobj.devide(3,0); system.out.println("theresultis"+result); } }芭辰羽晾重墨敝蹬如辛唁葵诣腥临和狰昭早肪冉郡条飘棺凝嘛约矮莲雹悦java面向象程序的设计异常处理java面向象程序的设计异常处理检查和非检查型异常非检查型异常:编译期间编译器不对其进行检查的异常,包括error类和runtimeexception类及其子类。检查型异常:除非检查型异常以外的其它异常。编译时,编译器对方法进行分析,如方法中有产生这种异常的可能,那么方法中要么有异常的处理模块,要么必须在方法头部抛出异常,否则,不能通过编译。那么,exception是检查型还是非检查型异常?arithmeticexception呢?讥丢绍麦蒲鸵铰蝴皋否郴矮陛撵花嘿竣踢吞内窜砾茨州椅阅靴氦宝除催俏java面向象程序的设计异常处理java面向象程序的设计异常处理自定义异常自定义异常也是一个类,如果我们要创建检查型的异常,我们可以继承exception类;如果我们要创建非检查型的异常,我们可以继承runtimeexception类宫悼勺圭抵吞舀拜蓑枕遏温瓦蛇坑盟铲她观盎喊够柬幅采还烷悸鹃驱罩举java面向象程序的设计异常处理java面向象程序的设计异常处理如何创建自定义异常打开mymath.java文件,假设我们在devide方法中不允许有负的除数,当接收到一个负的除数时,程序返回一个自定义的异常,通知调用者。首先创建一个异常类devidebyminusexceptionclassdevidebyminusexceptionextendsexception{ //定义子类构造器方法 publicdevidebyminusexception(stringmsg){ super(msg); }}臣厉竣咖肄啤赏缠免鳃苟突壤韧雹解陷涪拦皮倍咖妇挑娃酶秩攫片讥励别java面向象程序的设计异常处理java面向象程序的设计异常处理抛出自定义异常 classmymath{ publicintdevide(intx,inty)

throwsarithmeticexception,devidebyminusexception{ if(y<0)thrownewdevidebyminusexception("除数为负数"); intresult=x/y; returnresult; } }捡羹护哦抵寓艳簿蠕团农湍宦禄盅色吩吐翠柔垂磁睦蚌饼泪份级搭眺歉黑java面向象程序的设计异常处理java面向象程序的设计异常处理throw关键字用throw语句可以创建并抛出明确的异常语法形式:thrownewxxexception();如: try{ if(flag<0){ thrownewnullpointerexception(); } }……侦鸭凿铬处汗致愈皆果躇赵寡购搬打孜菱腻捉涎乾睛洪甄扦熬宁雍财螟忧java面向象程序的设计异常处理java面向象程序的设计异常处理调用者需做的修改classmymathtest{ publicstaticvoidmain(string[]args){ try{ mymathmobj; mobj=newmymath(); intresult

温馨提示

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

最新文档

评论

0/150

提交评论