版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四篇Java语言基础类第八章 异常第九章 字符串第十章 线程第四篇Java语言基础类8.1异常的概念8.2异常的分类8.3创建异常类型8.4throw8.5throws子句8.6try、catch和finally8.7何时使用异常8.8小结第八章异常【课前思考】
什么是异常?Java中对异常的处理机制是什么?【学习目标】
本讲主要讲述了Java语言中的独特的异常处理机制,通过本讲的学习,同学们可以编写更为完善的Java程序。【学习指南】
仔细阅读本章各知识点的内容,深刻理解Java语言中独特的例外处理机制,掌握处理问题的方法,多练习,多上机。【难重点】
重点:在编写程序时,要正确地使用捕获异常和声明抛弃异常的两种异常处理的方法。
难点:如何使用Java中的异常处理机制,自定义异常类型与系统已提供的异常类型的区别与联系。8.1异常的概念什么是异常 定义:在程序的运行过程中所发生的异常事件,它中断指令的正常执行。
Java中提供了一种独特的异常处理机制。没有处理错误的程序 3.
以常规方法处理错误8.1异常的概念read-file{openTheFile;determineitssize;allocatethatmuchmemory;readthefileintomemory;statement;
closeTheFile;}openFiles;if(theFilesOpen){determinethelenthofthefile;if(gotTheFileLength){allocatethatmuchmemory;if(gotEnoughMemory){readthefileintomemory;if(readSuccess){statement;if(closeTheFile)closeFile;elseerrorCode=-1;}elseerrorCode=-2;}elseerrorCode=-3;}elseerrorCode=-4;}elseerrorCode=-5;缺点不采用异常处理的缺点:观察前面的程序你会发现大部分精力花在出错处理上只把能够想到的错误考虑到,对以外的情况无法处理程序可读性差出错返回信息量太少8.1异常的概念用异常的形式处理错误8.1异常的概念read-File;{try{ openTheFile; determineitssize; allocatethatmuchmemory;readthefileintomemory;statement;
closeTheFile;}catch(fileopenFailed) {dosomething;} catch(sizeDetermineFailed) {dosomething;} catch(memoryAllocateFailed) {dosomething;} catch(readFailed) {dosomething;} catch(fileCloseFailed) {dosomething;}}和传统的方法比较异常的优点:把错误代码从常规代码中分离出来把错误传播给调用堆栈按错误类型和错误差别分组系统提供了对于一些无法预测的错误的捕获和处理克服了传统方法的错误信息有限的问题method1method2method3method4产生异常传递处理异常JDK的每个包中都定义了异常类,都继承自Throwable类,该类的任一扩展类所实例化的对象都称为异常对象。8.2 异常的分类类型定义举例Error由Java虚拟机生成并抛出,描述Java运行时间系统内部的错误以及资源耗尽情况。Java程序不做处理。(Error情况很少出现)动态链接失败虚拟机错误RuntimeException(运行时异常)由于编程错误,产生的便是RuntimeException错误的转型数组越界存取空指针访问非RuntimeException的Exception由不可预测的因素造成的异常事件。试图越过文件尾继续读取试图打开一个形式错误的URL8.2 异常的分类Throwable不做处理Error由用户捕获或声明并处理缺省的异常处理程序ExceptionRuntimeException√√非检测性异常检测性异常非检测性异常例18.2 异常的分类classExceptionDemo2{
publicstaticvoidmain(Stringargs[]){
inta=0;
System.out.println(5/a);//运行时异常
}
}结果:C:\>javacExceptionDemo2.java
C:\>javaExceptionDemo2
java.lang.ArithmeticException:/byzeroat
ExceptionDemo2.main(ExceptionDemo2.java:4)说明:因为除数不能为0,所以在程序运行的时候出现了除0溢出的异常事件。如果Java内建的异常类无法满足程序的要求,那么就需要创建自己的异常。需要将异常类从Exception中继承出来,或从Exception的一个子类继承,如IOException。例2:用一个新的属性值替换一个制定属性的当前值,如果该属性名不存在,替换不合理,引发一个异常。8.3 创建异常类型classMyExceptionextendsException{….}publicclassNoSuchAttributeExceptionextendsException{publicStringattrName;publicNoSuchAttributeException(Stringname){super("Noattributenamed\""+name+"\"found");attrName=name;}}throw:引发一个异常对象。在Java程序的执行过程中,如果出现了异常事件,就会产生一个异常对象。生成的异常对象将传递给Java运行时系统,这一异常的产生和提交过程称为引发(throw)异常。引发有时也称为抛出。
throw
ExceptionObject;8.4throwthrow
new
NoSuchAttributeException(
);AmethodExceptionAnothermethodthrowcaughtpublicvoidreplaceValue(Stringname,ObjectnewValue)throwsNoSuchAttributeException{Attrattr=find(name);//lookuptheattrif(attr==null)
//itisn’tfoundthrownewNoSuchAttributeException(name);attr.setValue(newValue);}引发异常的两种途径:在方法或构造器中,自己通过throw语句引发异常调用可引发某种异常的方法或构造器 定义:说明一个方法可引发的一组检测性异常。它包含一个用逗号分隔的异常类型表。功能:使方法或构造器的调用者知道,调用可能返回正常结果,也可能得到异常结果。只有在方法中未被捕获的异常才必须列出。8.5throws子句publicvoidreplaceValue(Stringname,ObjectnewValue)
throwsNoSuchAttributeException{Attrattr=find(name);//lookuptheattrif(attr==null)//itisn’tfoundthrownewNoSuchAttributeException(name);attr.setValue(newValue);}只有throws子句说明过的异常类型才可以被引发。若方法没有throws子句,则说明不能引发异常。当调用一个在其throws子句中列出了检测异常的方法时,有以下3种选择:捕获并处理该异常。捕获并映射到自己的一个异常,即引发一个在自己的throws子句中说明的异常。在自己的throws子句中说明该异常,并使该异常通过。8.5throws子句try-catch-finally语句:实现捕获并处理异常。捕获异常的第一步是用try{…}选定捕获异常的范围,由try所限定的代码块中的语句在执行过程中可能会生异常对象并throw(抛出)。捕获异常的第二步:在catch块中是对异常对象进行处理的代码,每个try代码块可以伴随一个或多个catch语句,用于处理try代码块中所产生的异常事件。捕获异常的最后一步是通过finally语句为异常处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态作统一的管理。不论在try代码块中是否发生了异常事件,finally块中的语句都会被执行。8.6try、catch和finallytry{
statements1
//接受监视的程序块,在此区域内发生的异常,由catch中指定的程序处理
}catch(exception_type1identifier1){//要处理的异常类型和标识符
statements2 //处理异常
}catch(exception_type2
identifier2){//要处理的异常类型和标识符
statements3 //处理异常......
}finally{
statements4}例子3,处理replaceValue引发的异常8.6try、catch和finallyObjectvalue=newInteger(8);try{attributedObj.replaceValue("Age",value);}catch(NoSuchAttributeExceptione){//shouldn'thappen,butrecoverifitdoesAttrattr=newAttr(e.attrName,value);attributeObj.add(attr);}捕获异常对象的顺序和catch语句的顺序有关,当捕获到一个异常对象时,剩下的catch语句就不再进行匹配。因此,在安排catch语句的顺序时,首先应该捕获最特殊的异常对象,然后再逐渐一般化。即先安排子类,再安排父类。若引发的异常与catch中的异常类型或超类类型都不匹配,该异常将被转送到调用这个方法的代码。8.6try、catch和finallyclassSuperExceptionextendsException{}classSubExceptionextendsSuperException{}classBadCatch{publicvoidgoodTry(){/*ThisisanINVALIDcatchordering*/try{thrownewSubException();}catch(SuperExceptionsuperRef){//CatchesbothSuperExceptionandSubException}catch(SubExceptionsubRef){//Thiswouldneverbereached}}}finally:用来清理内部状态或释放非对象资源。finally子句可用来对break、continue和return进行清理。不论执行何种控制转移语句,finally子句都被执行。finally在文件处理时非常有用若在finally块中重建了结束原因,则该原因取代原先的原因,以前原因被遗忘。8.6.1finallytry{对文件进行处理的程序;}catch(IOExceptione){//对文件异常进行处理;}finally{不论是否发生异常,都关闭文件;}try{//...dosomething...return1;}finally{return2}在不知结束条件时,通过异常来检测8.7何时使用异常while((token=stream.next())!=Stream.END)process(token);stream.close();try{for(;;){process(stream.next());}}catch(StreamEndExceptione){stream.close();}异常Exception是一个类,程序运行时,发生的每个异常都是具体的对象。一个方法用throws子句说明可引发多种类型的异常。异常的类需先设计好,扩展于Exception,修饰以public,并含有适当的域和构造器;在调用时,用try-catch-finally来捕获这些类型的异常。一般格式:正常程序和出错处理分离开来8.8小结try{Javastatement;}catch(ExceptionType1ExceptionObject){
Exception1handling;}catch(ExceptionType2ExceptionObject){
Except
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 深圳二手设备租赁合同(2024版)3篇
- 二零二四年度企业合作研发新能源合同
- 二零二四年数字化校园建设整体解决方案合同3篇
- 二零二四年度水电工程物资采购承包合同2篇
- 烧烤食材供应合同(2024版):特色烧烤食材供应与质量保证协议6篇
- 2024版工程现场管理服务合同2篇
- (2024版)武汉汽车租赁公司车辆采购合同
- 水利建设工程施工合同2024年度定制版2篇
- 2024年度能源行业数字化招标交易系统升级改造合同
- 二零二四年份国际时装周活动策划执行合同3篇
- 垃圾处理厂工程施工组织设计
- 《电子商务概论》课件-第二章 物联网与人工智能
- 物管物业交接验收明细表格(全)模板
- 学校矛盾纠纷排查化解工作方案(3篇)
- 万物之理-爱因斯坦之梦智慧树知到期末考试答案章节答案2024年中国海洋大学
- 二级公立医院绩效考核三级手术目录(2020版)
- 6人小品《没有学习的人不伤心》台词完整版
- 《王戎不取道旁李》课件完美版
- 口腔科诊断证明书模板
- 国学知识文库集部别集·楼居杂著野航诗稿野航文稿野航附录
- 电工学术语 日语
评论
0/150
提交评论