Java面向象程序的设计异常处理

上传人:大米 文档编号:568308852 上传时间:2024-07-24 格式:PPT 页数:35 大小:710KB
返回 下载 相关 举报
Java面向象程序的设计异常处理_第1页
第1页 / 共35页
Java面向象程序的设计异常处理_第2页
第2页 / 共35页
Java面向象程序的设计异常处理_第3页
第3页 / 共35页
Java面向象程序的设计异常处理_第4页
第4页 / 共35页
Java面向象程序的设计异常处理_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《Java面向象程序的设计异常处理》由会员分享,可在线阅读,更多相关《Java面向象程序的设计异常处理(35页珍藏版)》请在金锄头文库上搜索。

1、霞怎廉跟棋亚村丧老苟乏屹捷癸跌炸斧词泛娥带但犀纠蔫萝苛湘揽澎优雄Java面向象程序的设计异常处理Java面向象程序的设计异常处理面向对象程序设计面向对象程序设计(Java)(Java) - - 异常处理异常处理深圳职业技术学院深圳职业技术学院主讲教师:袁梅冷主讲教师:袁梅冷 2008-06-10电信学院电信学院-软件工程系软件工程系乡涪鹊噎狡岛澡械忽济陆恬侥榜搪咒匆迹月探永积感艳目琵菜段擦硕贰例Java面向象程序的设计异常处理Java面向象程序的设计异常处理本单元教学内容异常的基本概念和异常的基本概念和JavaJava异常处理机制异常处理机制掌握掌握 try trycatch catch 语句

2、的用法语句的用法掌握掌握throwsthrows关键字的用法关键字的用法淤封奉芦钝敬纷司据翼屑滚锭别蕾站咯赌殃扼恐胜戍怀袖汞讶淤炯奴馅淘Java面向象程序的设计异常处理Java面向象程序的设计异常处理什么是异常?class MyMathpublic int devide(int x,int y)int result=x/y;return result;class MyMathTestpublic static void main(String args)MyMath mobj;mobj=new MyMath();int result;result=mobj.devide(3,0); Syste

3、m.out.println(the result is + result);该程序编译能通过吗?运行程序,有什么信息返回?该程序编译能通过吗?运行程序,有什么信息返回?榆拘肄凑惨龄篡钟穷镍睡格丈备贱咐即帜晃寂冯应铺销悦和壳捂裂迫闰躬Java面向象程序的设计异常处理Java面向象程序的设计异常处理异常Exception in thread main java.lang.ArithmeticException: / by zero这说明,程序发生了算术异常这说明,程序发生了算术异常(ArithmeticException),非正常的结束了。),非正常的结束了。这种情况就是我们说的这种情况就是我们说

4、的异常异常定义了程序中遇到的非致命的错误,而不异常定义了程序中遇到的非致命的错误,而不是编译时的语法错误。如除数为是编译时的语法错误。如除数为0,打开一个不,打开一个不存在的文件,操作数越界等等。存在的文件,操作数越界等等。衰雪谰仑摸婪瘸旱勿扁娟蔓分罢工酬耀劫创闲馆蜀稗装本靳恰扶球语荐剿Java面向象程序的设计异常处理Java面向象程序的设计异常处理异常的基本概念运行时发生的错误称为异常。运行时发生的错误称为异常。如果不对异常进行处理,那么一旦引发异常,程序将突如果不对异常进行处理,那么一旦引发异常,程序将突然中止。然中止。要么控制权返回给操作系统。要么控制权返回给操作系统。要么系统处于死机崩

5、溃状态。要么系统处于死机崩溃状态。因此,安全健壮的程序设计语言应当引入有效的异常处因此,安全健壮的程序设计语言应当引入有效的异常处理机制理机制极厉首供沫王寒煌狮靳隋蒸恋臻增卫抨退彬豢窗追蜀禄釜卧沤蕾兑盟晌坟Java面向象程序的设计异常处理Java面向象程序的设计异常处理对MyMathTest类进行如下修改class MyMathTestpublic static void main(String args)tryMyMath mobj;mobj=new MyMath();int result;result=mobj.devide(3,0); System.out.println(the res

6、ult is + result);catch(Exception e)System.out.println(e.getMessage();System.out.println(program is running here.);酒鞠鲤狸息延歪缸娃彭档蟹经谎筐塑茁雍命幽它窝麦淹减听彰廉谦春契砾Java面向象程序的设计异常处理Java面向象程序的设计异常处理 说明我们看到,当我们在程序中加了红色的代码后,我们看到,当我们在程序中加了红色的代码后,在出现了异常后,程序没有异常中止,而是正在出现了异常后,程序没有异常中止,而是正常的继续运行。为什么会这样呢?常的继续运行。为什么会这样呢?我们用我们用t

7、rycatch语句对程序中可能出现异常语句对程序中可能出现异常的语句进行了处理的语句进行了处理trystatementscatch(Exception e)statements汲泼喧抽习蛋录涡活肝点粟真誓屹验琼坊嘉事续搁够私节租琐雄鸣力汇员Java面向象程序的设计异常处理Java面向象程序的设计异常处理trycatch语句执行过程tryMyMath mobj;mobj=new MyMath();int result;result=mobj.devide(3,0); System.out.println(the result is + result);catch(Exception e)Syst

8、em.out.println(e.getMessage();System.out.println(program is running here.);铰禽澄缝厄说镍枯裁狈醛尺爸夏壁勃埃馏摔格敛穷关粗脐昨枢聘壶梢天斡Java面向象程序的设计异常处理Java面向象程序的设计异常处理catch语句块当当try代码块中的程序发生了异常,系统将这个代码块中的程序发生了异常,系统将这个异常发生的代码行号,类别等信息封装到一个异常发生的代码行号,类别等信息封装到一个对象中,并将这个对象传递给对象中,并将这个对象传递给catch代码块代码块catch(Exception e)System.out.printl

9、n(e.getMessage();Exception就是就是try代码块传递给代码块传递给catch代码块的代码块的变量类型,变量类型,e就是变量名。就是变量名。问题一:问题一:e可以改为其他的名字吗?可以改为其他的名字吗?献吠男症侗腥墓辽碌泄券亮卤辱类盾沥鞭枯拨腰蜗耶廷贸蚕淄蛰恶翱圆任Java面向象程序的设计异常处理Java面向象程序的设计异常处理编程实践class NoCatchpublic static void main(String args) String str=args0; int i=Integer.parseInt(str); System.out.println(输入的数

10、据为:输入的数据为: + i); System.out.println(here is the end of the program);该程序运行时,如果没有输入相应的命令行参数,会怎该程序运行时,如果没有输入相应的命令行参数,会怎样?样?如何解决?如何解决? 鞍姿龟表甸淋盔驴霖捍冗束磁靡涉遁竞骡倒箱豆酱布苟酷泳掌用摩撅谎菲Java面向象程序的设计异常处理Java面向象程序的设计异常处理程序修改如下class NoCatchpublic static void main(String args) tryString str=args0;int i=Integer.parseInt(str);S

11、ystem.out.println(输入的数据为:输入的数据为: + i); catch(ArrayIndexOutOfBoundsException e)System.out.println(没有输入命令行参数没有输入命令行参数); System.out.println(here is the end of the program);汝含麻凡嫌擦妓翌岛爹绎厅阔法愈凛躇腔艾乌拟呐接饱酚恕痉抨布塘签获Java面向象程序的设计异常处理Java面向象程序的设计异常处理为什么?出的是什么异常?出的是什么异常?请注意,我们在请注意,我们在catch中捕获的是哪种类型的异中捕获的是哪种类型的异常?而我们现

12、在出现的是哪种异常?常?而我们现在出现的是哪种异常?要处理这种新出现的异常,我们应该怎么做呢要处理这种新出现的异常,我们应该怎么做呢?新增一个新增一个catch块来捕获这个异常块来捕获这个异常catch(NumberFormatException e1)System.out.println(输入数据的格式不正输入数据的格式不正确确);运行结果怎样?还会出这种异常吗?为什么?运行结果怎样?还会出这种异常吗?为什么?辞耗易校囊辣祭沈伯用荷火李镐可比肋基秽汾瓦娘忻骆蜀皇各沁登证鲸骚Java面向象程序的设计异常处理Java面向象程序的设计异常处理小结 trycatch语句格式语句格式trystatem

13、ents /可能产生异常的程序代码可能产生异常的程序代码catch(ExceptionType1 e) /ExceptionType1类型异常的类型异常的catch子句子句statements /出现出现ExceptionType1类型类型异常时的处理程序异常时的处理程序catch(ExceptionType2 e) / ExceptionType1类型异常的类型异常的catch子句子句statements /出现出现ExceptionType1类型类型异常时的处理程序异常时的处理程序finallystatements/异常处理程序结构的统一出口异常处理程序结构的统一出口谩无贬桥蘸少帐堡就苍敦

14、肝驰序贪罐鄙巾褥她呼螟箕歪盔术暴增匣巧忆岁Java面向象程序的设计异常处理Java面向象程序的设计异常处理异常结构执行流程饼葡吹琳夕缓臣珐迎瞄美腮纳笨构丛枫泳栏前默蝶休形诚奇棍烩聚诌帆窖Java面向象程序的设计异常处理Java面向象程序的设计异常处理试一试 编写程序以命令行参数形式输入两个整数,要编写程序以命令行参数形式输入两个整数,要求计算并输出两个整数相除的商和余数,程序求计算并输出两个整数相除的商和余数,程序中必须对无命令行参数或少命令行参数引起的中必须对无命令行参数或少命令行参数引起的ArrayIndexOutOfBoundsException异常、数异常、数据格式不对引起的据格式不对

15、引起的NumberFormatException以及除数为以及除数为0引起的引起的ArithmeiticException异常异常分别进行捕获。分别进行捕获。亚我扯竟丁旗推训窟困竹刁伺诗诵燃潜抓汤肚晚架焰界甩犯戏积惑砚聘妻Java面向象程序的设计异常处理Java面向象程序的设计异常处理提问我们现在知道,在我们现在知道,在Java中采用中采用trycatch语句语句处理异常。处理异常。假设,假设,MyMath类是由甲写的,而类是由甲写的,而MyMathTest类是由乙写的,那么,在乙使用类是由乙写的,那么,在乙使用MyMathTest类类时,怎么能知道时,怎么能知道devide方法有可能出现异常

16、呢方法有可能出现异常呢?他又怎么会想到用?他又怎么会想到用trycatch语句去处理呢语句去处理呢?在在Java中,我们可以通过中,我们可以通过throws关键字来解决关键字来解决这个问题。这个问题。斟撑荔受凭好皋凋稍告棠己莱蛛忽酌馅皑迫车痒辐束勉锚陛迂兄领执泽拒Java面向象程序的设计异常处理Java面向象程序的设计异常处理修改MyMath类class MyMathpublic int devide(int x,int y) throws Exceptionint result=x/y;return result;class MyMathTestpublic static void main

17、(String args)MyMath mobj;mobj=new MyMath();int result;result=mobj.devide(3,1); System.out.println(the result is + result);注意,此时程序应该不会发生异常,但程序能编译通过吗?襟瀑搔即隆噪纺任谈急伊拇兴书留贱圃顷倔采巷肤省茎肺眠瞥锡久媳烙沃Java面向象程序的设计异常处理Java面向象程序的设计异常处理将MyMathTest类中添加trycatch语句public static void main(String args)tryMyMath mobj;mobj=new MyM

18、ath();int result;result=mobj.devide(3,0); System.out.println(the result is + result);catch(Exception e)System.out.println(e.getMessage();他馆项碉夫兢囤澎迟曲寇柯馅例臭惫糙枫五郝具免绣谚妖挫朱乏囚冶喇图Java面向象程序的设计异常处理Java面向象程序的设计异常处理throws关键字如果在一个方法中的语句执行时可能生成某种如果在一个方法中的语句执行时可能生成某种异常,但又不能确定如何处理,则此方法应声异常,但又不能确定如何处理,则此方法应声明抛出异常(如明抛出

19、异常(如throws Exception),表明该),表明该方法不对这些异常进行处理,而由该方法的调方法不对这些异常进行处理,而由该方法的调用者负责处理。用者负责处理。对于检查型异常,调用者要么用对于检查型异常,调用者要么用trycatch语语句进行处理(如上面我们的做法);要么继续句进行处理(如上面我们的做法);要么继续抛出该异常(如在上面的程序中,我们是在抛出该异常(如在上面的程序中,我们是在main方法中调用方法中调用devide方法的,如果在方法的,如果在main方法中不处理方法中不处理Exception类型异常,可以继续抛类型异常,可以继续抛出该异常)。出该异常)。 public s

20、tatic void main(String args) throws Exception勋衷李绷降清滇钮限东隙脊镰刁萤盏猿忆位健甄骆甘怎届胯棕内锈醇吮路Java面向象程序的设计异常处理Java面向象程序的设计异常处理问题 我们在前面的例子中,如果我们要从键盘输入数我们在前面的例子中,如果我们要从键盘输入数据,我们是如何写的?据,我们是如何写的?public static void main(String args) throws IOException BufferedReader rd; rd=new BufferedReader(new InputStreamReader(System.

21、in); String str1=rd.readLine(); 为什么要添加为什么要添加throws IOException?如果不添加如果不添加throws IOException,编译能通过吗?还可以怎,编译能通过吗?还可以怎样修改?样修改?耗喧蓄幌集钉握猖阜脓瞬辜烁鸳伐奸欢骂生逞孽溜峦腋色蔡善浓堆褐缘己Java面向象程序的设计异常处理Java面向象程序的设计异常处理试一试请分别使用两种方法修改下面程序,使程序能正常编译运行。请分别使用两种方法修改下面程序,使程序能正常编译运行。class ThrowDemopublic static void methodDemo(int i) thro

22、ws IOException,ClassNotFoundExceptionif(i0) throw new IOException();if(i0) throw new ClassNotFoundException();public static void main(String args)if(args0.length1)System.out.println(“请以命令行参数形式输入请以命令行参数形式输入1个整数个整数”);return;int i=Integer.parseInt(args0);methodDemo(i);拦钢狸忙蘑桨葡冰谗淋剂昧印勿锰蚁罐关拈紧骗侮原陵氧绍轩溅误似稗皮Ja

23、va面向象程序的设计异常处理Java面向象程序的设计异常处理异常分类拾审趁钮仑赐肚辣屉腑瘩关泥载杖秀凳茹淖支狸僻益乡盖宽屁撵预厩蛮偿Java面向象程序的设计异常处理Java面向象程序的设计异常处理ErrorError异常Error异常:运行时间出现的系统内部的错误以及资源耗:运行时间出现的系统内部的错误以及资源耗尽等情况。尽等情况。如:虚拟机内部发生错误、电源断电引起的异常中止等。如:虚拟机内部发生错误、电源断电引起的异常中止等。特点:这类异常性质严重,本身难以控制,且恢复可能性:这类异常性质严重,本身难以控制,且恢复可能性极小,意义不大。极小,意义不大。 JavaJava不要求对这类异常进行

24、必要的控制,编译期也不对这不要求对这类异常进行必要的控制,编译期也不对这类异常进行检测。类异常进行检测。掀间秀虱循汤急剃赢坑炳掸侦贤赣韧诵煌括窒凸稚景逆钾啪普瓣汗稀圆越Java面向象程序的设计异常处理Java面向象程序的设计异常处理RuntimeException异常RuntimeException及其子类描述的异常,一般描述的异常,一般是由于编程错误引起的异常。如:错误的造型、是由于编程错误引起的异常。如:错误的造型、数组越界存取、空指针访问等。数组越界存取、空指针访问等。特点:完全可以通过改进程序加以克服,且数:完全可以通过改进程序加以克服,且数目很大。目很大。Java对这种异常的处理:编

25、译时,不对这类异:编译时,不对这类异常进行检测;运行时,会自动在异常发生处生常进行检测;运行时,会自动在异常发生处生成相应的异常的对象,并由系统默认的异常处成相应的异常的对象,并由系统默认的异常处理器处理(通常输出错误信息及错误地点)。理器处理(通常输出错误信息及错误地点)。应用程序可以对其进行捕获处理(但不提倡)。应用程序可以对其进行捕获处理(但不提倡)。亩孰臃眷肤祥变碎互钝凹原眯腐机钦洁原你舀镐脆畏斡脾舔奔欢家寂暗母Java面向象程序的设计异常处理Java面向象程序的设计异常处理运行环境引发的异常运行环境引发的异常。运行环境引发的异常。如:网络不通,文件找不到等。如:网络不通,文件找不到等

26、。特点:只要运行环境正常,程序是可以正常运:只要运行环境正常,程序是可以正常运行的。行的。 JavaJava要求对这类异常进行必要的控制。要求对这类异常进行必要的控制。挤谅姓鹤辅考贩靖歪腔广磨苦旋捞病蛤狙星汀维墅印钵鼎衫确百膛汁突锋Java面向象程序的设计异常处理Java面向象程序的设计异常处理试一试class MyMathpublic int devide(int x,int y) throws ArithmeticExceptionint result=x/y;return result;class MyMathTestpublic static void main(String args

27、)MyMath mobj;mobj=new MyMath();int result;result=mobj.devide(3,0); System.out.println(the result is + result);芭辰羽晾重墨敝蹬如辛唁葵诣腥临和狰昭早肪冉郡条飘棺凝嘛约矮莲雹悦Java面向象程序的设计异常处理Java面向象程序的设计异常处理检查和非检查型异常非检查型异常:编译期间编译器不对其进行检查的异常,包括编译期间编译器不对其进行检查的异常,包括ErrorError类和类和RuntimeExceptionRuntimeException类及其子类。类及其子类。检查型异常:除非检查型异

28、常以外的其它异常。除非检查型异常以外的其它异常。编译时,编译器对方法进行分析,如方法中有产生这编译时,编译器对方法进行分析,如方法中有产生这种异常的可能,那么方法中要么有异常的处理模块,种异常的可能,那么方法中要么有异常的处理模块,要么必须在方法头部抛出异常,否则,不能通过编译。要么必须在方法头部抛出异常,否则,不能通过编译。那么,那么,Exception是检查型还是非检查型异常?是检查型还是非检查型异常?ArithmeticException呢?呢?讥丢绍麦蒲鸵铰蝴皋否郴矮陛撵花嘿竣踢吞内窜砾茨州椅阅靴氦宝除催俏Java面向象程序的设计异常处理Java面向象程序的设计异常处理自定义异常自定义

29、异常也是一个类,如果我们要创建检查型的自定义异常也是一个类,如果我们要创建检查型的 异常,异常,我们可以继承我们可以继承Exception类;如果我们要创建非检查型的类;如果我们要创建非检查型的异常,我们可以继承异常,我们可以继承RuntimeException 类类宫悼勺圭抵吞舀拜蓑枕遏温瓦蛇坑盟铲她观盎喊够柬幅采还烷悸鹃驱罩举Java面向象程序的设计异常处理Java面向象程序的设计异常处理如何创建自定义异常打开打开MyMath.java文件,假设我们在文件,假设我们在devide方方法中不允许有负的除数,当接收到一个负的除法中不允许有负的除数,当接收到一个负的除数时,程序返回一个自定义的异

30、常,通知调用数时,程序返回一个自定义的异常,通知调用者。者。首先创建一个异常类首先创建一个异常类DevideByMinusExceptionclass DevideByMinusException extends Exception/定义子类构造器方法定义子类构造器方法public DevideByMinusException(String msg)super(msg); 臣厉竣咖肄啤赏缠免鳃苟突壤韧雹解陷涪拦皮倍咖妇挑娃酶秩攫片讥励别Java面向象程序的设计异常处理Java面向象程序的设计异常处理抛出自定义异常class MyMathpublic int devide(int x,int y

31、) throws ArithmeticException,DevideByMinusException if(y0) throw new DevideByMinusException(除除数为负数数为负数);int result=x/y;return result;捡羹护哦抵寓艳簿蠕团农湍宦禄盅色吩吐翠柔垂磁睦蚌饼泪份级搭眺歉黑Java面向象程序的设计异常处理Java面向象程序的设计异常处理throw关键字 用用throw语句可以创建并抛出明确的异常语句可以创建并抛出明确的异常语法形式:语法形式:Throw new xxException();如: try if(flag0) throw ne

32、w NullPointerException(); 侦鸭凿铬处汗致愈皆果躇赵寡购搬打孜菱腻捉涎乾睛洪甄扦熬宁雍财螟忧Java面向象程序的设计异常处理Java面向象程序的设计异常处理调用者需做的修改class MyMathTestpublic static void main(String args)tryMyMath mobj;mobj=new MyMath();int result;result=mobj.devide(3,0);/result=mobj.devide(3,-1); System.out.println(the result is + result);catch(Arithm

33、eticException e)System.out.println(程序发生程序发生ArithmeticException);catch(DevideByMinusException e)System.out.println(程序发生程序发生DevideByMinusException);catch(Exception e)System.out.println(程序发生其他类型异常程序发生其他类型异常);制禾圆邻砌纷眷繁顾焦揣裔咨蟹寿佯砂饵响议键锚带骚臭丹熔俭咆滤敬怔Java面向象程序的设计异常处理Java面向象程序的设计异常处理多catch结构上面的程序,我们使用一个上面的程序,我们使用一

34、个try后面跟着多个后面跟着多个catch来捕捉异常,每一个来捕捉异常,每一个catch可以处理一个可以处理一个不同的异常。不同的异常。如果将如果将catch(Exception e)代码块放到代码块放到前面,行吗?为什么?前面,行吗?为什么?Exception类是所有异常类的父类,从语法上讲,类是所有异常类的父类,从语法上讲,是能够处理所有异常的。所以他后面的是能够处理所有异常的。所以他后面的catch代代码块永远都得不到执行码块永远都得不到执行使用多使用多catch结构捕获多种异常时,结构捕获多种异常时,catch子句子句应该按先子类异常再父类异常的顺序排列应该按先子类异常再父类异常的顺序

35、排列忱殖纱克钦汁晴痞宴店码埂壹来角扩币瓣浊留拟隶时混鼻哨舶幕锄搅媳幢Java面向象程序的设计异常处理Java面向象程序的设计异常处理实战演习 编程求解并输出从键盘输入的浮点数的平方根,编程求解并输出从键盘输入的浮点数的平方根,并设计自己的异常来处理输入数据小于并设计自己的异常来处理输入数据小于0.0的异的异常情况,并在出现异常时输出提示信息常情况,并在出现异常时输出提示信息“输入了输入了负数负数”。娥怎菏阑圃膊卿伶讫渍训思及演锄遇其颧敢那寐埠赢楼龙眩庶根钝仟乳港Java面向象程序的设计异常处理Java面向象程序的设计异常处理霞怎廉跟棋亚村丧老苟乏屹捷癸跌炸斧词泛娥带但犀纠蔫萝苛湘揽澎优雄Java面向象程序的设计异常处理Java面向象程序的设计异常处理深圳职业技术学院深圳职业技术学院 2008-05-15燎杜陵祸贰矛颁身泼酒邀赊撅自宋大跃彭臼稿臂惜芝吕舔祟盛锻涡辟箱广Java面向象程序的设计异常处理Java面向象程序的设计异常处理

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

最新文档


当前位置:首页 > 办公文档 > 工作计划

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