版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Chapter13ExceptionHandling1MotivationsWhenaprogramrunsintoaruntimeerror,theprogramterminatesabnormally.Howcanyouhandletheruntimeerrorsothattheprogramcancontinuetorunorterminategracefully?Thisisthesubjectwewillintroduceinthischapter.2
ObjectivesTogetanoverviewofexceptionsandexceptionhandling(§13.2).Toexploretheadvantagesofusingexceptionhandling(§13.3).Todistinguishexceptiontypes:Error(fatal)vs.Exception(nonfatal),andcheckedvs.unchecked(§13.4).Todeclareexceptionsinamethodheader(§13.5.1).Tothrowexceptionsinamethod(§13.5.2).Towriteatry-catchblocktohandleexceptions(§13.5.3).Toexplainhowanexceptionispropagated(§13.5.3).Tousethefinallyclauseinatry-catchblock(§13.6).Touseexceptionsonlyforunexpectederrors(§13.7).Torethrowexceptionsinacatchblock(§13.8).Tocreatechainedexceptions(§13.9).Todefinecustomexceptionclasses(§13.10).3Exception-HandlingOverview4QuotientRunQuotientWithIfRunQuotientWithExceptionRunShowruntimeerrorFixitusinganifstatementWhatiftheruntimeerroroccursinacalledmethod?ExceptionAdvantages5QuotientWithMethodRunNowyouseetheadvantagesofusingexceptionhandling.Itenablesamethodtothrowanexceptiontoitscaller.Withoutthiscapability,amethodmusthandletheexceptionorterminatetheprogram.HandlingInputMismatchException6InputMismatchExceptionDemoRunByhandlingInputMismatchException,yourprogramwillcontinuouslyreadaninputuntilitiscorrect.ExceptionTypes7SystemErrors8SystemerrorsarethrownbyJVMandrepresentedintheErrorclass.TheErrorclassdescribesinternalsystemerrors.Sucherrorsrarelyoccur.Ifonedoes,thereislittleyoucandobeyondnotifyingtheuserandtryingtoterminatetheprogramgracefully.
Exceptions9Exceptiondescribeserrorscausedbyyourprogramandexternalcircumstances.Theseerrorscanbecaughtandhandledbyyourprogram.RuntimeExceptions10RuntimeExceptioniscausedbyprogrammingerrors,suchasbadcasting,accessinganout-of-boundsarray,andnumericerrors.CheckedExceptionsvs.UncheckedExceptions11RuntimeException,Errorandtheirsubclassesareknownasunchecked
exceptions.Allotherexceptionsareknownascheckedexceptions,meaningthatthecompilerforcestheprogrammertocheckanddealwiththeexceptions.
UncheckedExceptions12Inmostcases,uncheckedexceptionsreflectprogramminglogicerrorsthatarenotrecoverable.Forexample,aNullPointerExceptionisthrownifyouaccessanobjectthroughareferencevariablebeforeanobjectisassignedtoit;anIndexOutOfBoundsExceptionisthrownifyouaccessanelementinanarrayoutsidetheboundsofthearray.Thesearethelogicerrorsthatshouldbecorrectedintheprogram.Uncheckedexceptionscanoccuranywhereintheprogram.Toavoidcumbersomeoveruseoftry-catchblocks,Javadoesnotmandateyoutowritecodetocatchuncheckedexceptions.UncheckedExceptions13Uncheckedexception.Declaring,Throwing,andCatchingExceptions14DeclaringExceptionsEverymethodmuststatethetypesofcheckedexceptionsitmightthrow.Thisisknownasdeclaringexceptions.publicvoidmyMethod()throwsIOExceptionpublicvoidmyMethod()throwsIOException,OtherException15ThrowingExceptionsWhentheprogramdetectsanerror,theprogramcancreateaninstanceofanappropriateexceptiontypeandthrowit.Thisisknownasthrowinganexception.Hereisanexample,thrownewTheException();TheExceptionex=newTheException();
throwex;16ThrowingExceptionsExample
/**Setanewradius*/publicvoidsetRadius(doublenewRadius)
throwsIllegalArgumentException{if(newRadius>=0)radius=newRadius;else
thrownewIllegalArgumentException("Radiuscannotbenegative");}17CatchingExceptionstry{statements;//Statementsthatmaythrowexceptions}catch(Exception1exVar1){handlerforexception1;}catch(Exception2exVar2){handlerforexception2;}...catch(ExceptionNexVar3){handlerforexceptionN;}
18CatchingExceptions19CatchorDeclareCheckedExceptionsJavaforcesyoutodealwithcheckedexceptions.Ifamethoddeclaresacheckedexception(i.e.,anexceptionotherthanErrororRuntimeException),youmustinvokeitinatry-catchblockordeclaretothrowtheexceptioninthecallingmethod.Forexample,supposethatmethodp1invokesmethodp2andp2maythrowacheckedexception(e.g.,IOException),youhavetowritethecodeasshownin(a)or(b).20Example:Declaring,Throwing,andCatchingExceptionsObjective:Thisexampledemonstratesdeclaring,throwing,andcatchingexceptionsbymodifyingthesetRadiusmethodintheCircleclassdefinedinChapter8.ThenewsetRadiusmethodthrowsanexceptionifradiusisnegative.21TestCircleWithExceptionRunCircleWithExceptionRethrowingExceptionstry{statements;}catch(TheExceptionex){performoperationsbeforeexits;throwex;}22ThefinallyClausetry{statements;}catch(TheExceptionex){handlingex;}finally{finalStatements;}23TraceaProgramExecutiontry{statements;}catch(TheExceptionex){handlingex;}finally{finalStatements;}Nextstatement;24animationSupposenoexceptionsinthestatementsTraceaProgramExecutiontry{statements;}catch(TheExceptionex){handlingex;}finally{finalStatements;}Nextstatement;25animationThefinalblockisalwaysexecutedTraceaProgramExecutiontry{statements;}catch(TheExceptionex){handlingex;}finally{finalStatements;}Nextstatement;26animationNextstatementinthemethodisexecutedTraceaProgramExecutiontry{statement1;statement2;statement3;}catch(Exception1ex){handlingex;}finally{finalStatements;}Nextstatement;27animationSupposeanexceptionoftypeException1isthrowninstatement2TraceaProgramExecutiontry{statement1;statement2;statement3;}catch(Exception1ex){handlingex;}finally{finalStatements;}Nextstatement;28animationTheexceptionishandled.TraceaProgramExecutiontry{statement1;statement2;statement3;}catch(Exception1ex){handlingex;}finally{finalStatements;}Nextstatement;29animationThefinalblockisalwaysexecuted.TraceaProgramExecutiontry{statement1;statement2;statement3;}catch(Exception1ex){handlingex;}finally{finalStatements;}Nextstatement;30animationThenextstatementinthemethodisnowexecuted.TraceaProgramExecutiontry{statement1;statement2;statement3;}catch(Exception1ex){handlingex;}catch(Exception2ex){handlingex;throwex;}finally{finalStatements;}Nextstatement;31animationstatement2throwsanexceptionoftypeException2.TraceaProgramExecutiontry{statement1;statement2;statement3;}catch(Exception1ex){handlingex;}catch(Exception2ex){handlingex;throwex;}finally{finalStatements;}Nextstatement;32animationHandlingexceptionTraceaProgramExecutiontry{statement1;statement2;statement3;}catch(Exception1ex){handlingex;}catch(Exception2ex){handlingex;throwex;}finally{finalStatements;}Nextstatement;33animationExecutethefinalblockTraceaProgramExecutiontry{statement1;statement2;statement3;}catch(Exception1ex){handlingex;}catch(Exception2ex){handlingex;throwex;}finally{finalStatements;}Nextstatement;34animationRethrowtheexceptionandcontrolistransferredtothecallerCautionsWhenUsingExceptionsExceptionhandlingseparateserror-handlingcodefromnormalprogrammingtasks,thusmakingprogramseasiertoreadandtomodify.Beaware,however,thatexceptionhandlingusuallyrequiresmoretimeandresourcesbecauseitrequiresinstantiatinganewexceptionobject,rollingbackthecallstack,andpropagatingtheerrorstothecallingmethods.35WhentoThrowExceptionsAnexceptionoccursinamethod.Ifyouwanttheexceptiontobeprocessedbyitscaller,youshouldcreateanexceptionobjectandthrowit.Ifyoucanhandletheexceptioninthemethodwhereitoccurs,thereisnoneedtothrowit.36WhentoUseExceptionsWhenshouldyouusethetry-catchblockinthecode?Youshoulduseittodealwithunexpectederrorconditions.Donotuseittodealwithsimple,expectedsituations.Forexample,thefollowingcode37try{System.out.println(refVar.toString());}catch(NullPointerExceptionex){System.out.println("refVarisnull");}WhentoUseExceptionsisbettertobereplacedby38if(refVar!=null)System.out.println(refVar.toString());elseSystem.out.println("refVarisnull");DefiningCustomExceptionClasses39UsetheexceptionclassesintheAPIwheneverpossible.Definecustomexceptionclassesifthepredefinedclassesarenotsufficient.DefinecustomexceptionclassesbyextendingExceptionorasubclassofException.CustomExceptionClassExample40RunInvalidRadiusExceptionInListing13.8,thesetRadiusmethodthrowsanexceptioniftheradiusisnegative.Supposeyouwishtopasstheradiustothehandler,youhavetocreateacustomexceptionclass.CircleWithRadiusExceptionTestCircleWithRadiusExceptionAssertionsAnassertionisaJavastatementthatenablesyoutoassertanassumptionaboutyourprogram.AnassertioncontainsaBooleanexpressionthatshouldbetrueduringprogramexecution.Assertionscanbeusedtoassureprogramcorrectnessandavoidlogicerrors.
41CompanionWebsiteDeclaringAssertionsAnassertionisdeclaredusingthenewJavakeywordassertinJDK1.4asfollows:assertassertion;orassertassertion:detailMessage;whereassertionisaBooleanexpressionanddetailMessageisaprimitive-typeoranObjectvalue.42CompanionWebsiteExecutingAssertionsWhenanassertionstatementisexecuted,Javaevaluatestheassertion.Ifitisfalse,anAssertionErrorwillbethrown.TheAssertionErrorclasshasano-argconstructorandsevenoverloadedsingle-argumentconstructorsoftypeint,long,float,double,boolean,char,andObject.Forthefirstassertstatementwithnodetailmessage,theno-argconstructorofAssertionErrorisused.Forthesecondassertstatementwithadetailmessage,anappropriateAssertionErrorconstructorisusedtomatchthedatatypeofthemessage.SinceAssertionErrorisasubclassofError,whenanassertionbecomesfalse,theprogramdisplaysamessageontheconsoleandexits.43CompanionWebsiteExecutingAssertionsExamplepublicclassAssertionDemo{publicstaticvoidmain(String[]args){inti;intsum=0;for(i=0;i<10;i++){sum+=i;}asserti==10;assertsum>10&&sum<5*10:"sumis"+sum;}}44CompanionWebsiteCompilingProgramswithAssertionsSinceassertisanewJavakeywordintroducedinJDK1.4,youhavetocompiletheprogramusingaJDK1.4compiler.Furthermore,youneedtoincludetheswitch–source1.4inthecompilercommandasfollows:javac–source1.4AssertionDemo.javaNOTE:IfyouuseJDK1.5,thereisnoneedtousethe–source1.4optioninthecommand.45CompanionWebsiteRunningProgramswithAssertionsBydefault,theassertionsaredisabledatruntime.Toenableit,usetheswitch–enableassertions,or–eaforshort,asfollows:java–eaAssertionDemoAssertionscanbeselectivelyenabledordisabledatclasslevelorpackagelevel.Thedisableswitchis–disableassertionsor–daforshort.Forexample,thefollowingcommandenablesassertionsinpackagepackage1anddisablesassertionsinclassClass1.java–ea:package1–da:Class1AssertionDemo46CompanionWebsiteUsingExceptionHandlingorAssertionsAssertionshouldnotbeusedtoreplaceexceptionhandling.Exceptionhandlingdealswithunusualcircumstancesduringprogramexecution.Assertionsaretoassurethecorrectnessoftheprogram.Exceptionhandlingaddressesrobustnessand
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年度南京城市职业学院单招《物理》经典例题及参考答案详解
- 2024-2025学年度电工模拟试题含答案详解(精练)
- 2024-2025学年度注册公用设备工程师自我提分评估附参考答案详解【预热题】
- 2024-2025学年度护士资格证模考模拟试题及1套参考答案详解
- 公路质量管理培训
- 2024-2025学年度粮油食品检验人员预测复习及完整答案详解(名校卷)
- 2024-2025学年度法律职业资格考试试题预测试卷含答案详解【黄金题型】
- 变色龙的奥秘与科学探析-现代卡通插画风格
- 2024-2025学年助听器验配师经典例题附答案详解【突破训练】
- 儿童感冒的科学护理指南
- 北京市海淀区2024-2025学年九年级上学期期末语文试题
- 企业实施《兽药经营质量管理规范》情况的自查报告
- 新教科版小学四年级下册科学教案全册(计划及教学进度表)
- 2025年江西庐山交通索道公司招聘笔试参考题库含答案解析
- 2025年中移铁通有限公司招聘笔试参考题库含答案解析
- 2024年10月自考00022高等数学(工专)试题及答案含评分参考
- GB/T 22723-2024天然气能量的测定
- 无人机装调检修技术与人工智能应用课件:无人机人工智能应用场景
- 叉车维护保养与自行检查规范DB41-T 2486-2023
- 2024年《13464电脑动画》自考复习题库(含答案)
- DL∕T 1659-2016 电力作业用软梯技术要求
评论
0/150
提交评论