Java程序設(shè)計(jì)中文13slide_第1頁(yè)
Java程序設(shè)計(jì)中文13slide_第2頁(yè)
Java程序設(shè)計(jì)中文13slide_第3頁(yè)
Java程序設(shè)計(jì)中文13slide_第4頁(yè)
Java程序設(shè)計(jì)中文13slide_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Chapter13異常處理1ObjectivesToknowwhatisexceptionandwhatisexceptionhandling(§13.2).Todistinguishexceptiontypes:Error(fatal)vs.Exception(non-fatal),andcheckedvs.uncheckexceptions(§13.2).Todeclareexceptionsinthemethodheader(§13.3).Tothrowexceptionsoutofamethod(§13.3).Towriteatry-catchblocktohandleexceptions(§13.3).Toexplainhowanexceptionispropagated(§13.3).Torethrowexceptionsinatry-catchblock(§13.4).Tousethefinallyclauseinatry-catchblock(§13.5).Toknowwhentouseexceptions(§13.6).Todeclarecustomexceptionclasses(§13.7Optional).Toapplyassertionstohelpensureprogramcorrectness(§13.8).

2語(yǔ)法錯(cuò)誤,運(yùn)行錯(cuò)誤,邏輯錯(cuò)誤我們學(xué)過(guò)程序有三類錯(cuò)誤:語(yǔ)法錯(cuò)誤,運(yùn)行錯(cuò)誤,邏輯錯(cuò)誤。語(yǔ)法錯(cuò)誤的原因是沒(méi)有遵循語(yǔ)言的規(guī)則,它們可以由編譯器檢查發(fā)現(xiàn)。在程序運(yùn)行過(guò)程中,如果環(huán)境發(fā)現(xiàn)一個(gè)不可能執(zhí)行的操作,就會(huì)出現(xiàn)運(yùn)行錯(cuò)誤。如果程序沒(méi)有按照預(yù)期的方案執(zhí)行,就會(huì)發(fā)生邏輯錯(cuò)誤不。本章主要介紹應(yīng)用異常處理來(lái)處理運(yùn)行錯(cuò)誤。3運(yùn)行錯(cuò)誤Run4捕捉運(yùn)行錯(cuò)誤Run5異常類6系統(tǒng)錯(cuò)誤系統(tǒng)錯(cuò)誤由Java虛擬機(jī)拋出并在Error類中描述。這種錯(cuò)誤很少發(fā)生,如果發(fā)生,除了通知用戶以及盡量穩(wěn)妥地結(jié)束程序外,幾乎什么都不能做。7ExceptionsException

描述由程序和外部環(huán)境引起的錯(cuò)誤,這些錯(cuò)誤能通過(guò)程序捕獲和處理。

8RuntimeExceptionsRuntimeException

描述編程錯(cuò)誤,比如不合適的轉(zhuǎn)換。運(yùn)行異常通常由Java虛擬機(jī)拋出。9必檢異常和免檢異常RuntimeException,Error

和它們的子類都稱為免檢異常,因?yàn)檫@類異??赡茉诔绦蛉魏蔚胤匠霈F(xiàn),為避免過(guò)多進(jìn)行異常處理,Java語(yǔ)言不允許編寫(xiě)捕獲或聲明免檢異常的代碼。

所有其他異常稱為必檢異常,意思是指編譯器會(huì)強(qiáng)制程序員檢查并處理它們。

10必檢異常和免檢異常Uncheckedexception.11聲明、拋出、捕捉異常12聲明異常每個(gè)方法都必須說(shuō)明它可能拋出的必檢異常的類型,這稱為聲明異常。

publicvoidmyMethod()throwsIOExceptionpublicvoidmyMethod()throwsIOException,OtherException注:如果在父類中方法沒(méi)有聲明異常,那么在子類中不能對(duì)其進(jìn)行覆蓋以聲明異常。13拋出異常程序檢查到一個(gè)錯(cuò)誤后,創(chuàng)建一個(gè)適當(dāng)類型異常的實(shí)例并拋出它,這稱為拋出異常。例如,thrownewTheException();TheExceptionex=newTheException();

throwex;注:JavaAPI中的每個(gè)異常類至少有兩個(gè)構(gòu)造方法:一個(gè)無(wú)參構(gòu)造方法和一個(gè)帶有String參數(shù)的構(gòu)造方法。該參數(shù)用于描述異常,稱為異常信息,可以使用getMessage()獲得。14拋出異常例子

/**Setanewradius*/publicvoidsetRadius(double

newRadius)

throwsIllegalArgumentException{if(newRadius>=0)radius=newRadius;else

thrownewIllegalArgumentException("Radiuscannotbenegative");}15捕捉異常try{statements;//Statementsthatmaythrowexceptions}catch(Exception1exVar1){handlerforexception1;}catch(Exception2exVar2){handlerforexception2;}...catch(ExceptionNexVar3){handlerforexceptionN;}

16捕捉異常注:如果異常不能在當(dāng)前的方法中捕獲,就傳給該方法的調(diào)用者。這個(gè)過(guò)程一直重復(fù),直到異常被捕獲或被傳給main方法。注:異常類可派生出多種子異常類,如果一個(gè)catch塊能捕獲父類異常,它也能捕獲所有的子類異常。所以父類的異常塊不能出現(xiàn)在子類的catch塊前。17捕捉或聲明必檢異常Java強(qiáng)迫程序員處理必檢異常。如果方法聲明一個(gè)必檢異常,必須在try-catch塊中調(diào)用它或者在調(diào)用它的方法中聲明拋出異常。例如,假定方法p1調(diào)用方法p2,p2可能拋出一個(gè)必檢異常(如IOException),就要像下圖a或b那樣編寫(xiě)代碼。18Example:聲明、拋出和捕捉異常Objective:本例演示如何聲明、拋出和捕獲異常。改寫(xiě)例子7-3中的Circle2類的setRadius方法,如果半徑是負(fù)數(shù),則拋出一個(gè)異常。TestCircleWithExceptionRunCircleWithException19重新拋出異常try{statements;}catch(TheExceptionex){performoperationsbeforeexits;throwex;}20finally

子句try{statements;}catch(TheExceptionex){handlingex;}finally{

finalStatements;}有時(shí),不論異常是否出現(xiàn)或者是否被捕獲,都希望執(zhí)行某些代碼。可用finally子句。在任何情況下,finally塊中的代碼都會(huì)執(zhí)行,不管try塊中是否出現(xiàn)異?;蛘呤欠癫东@了異常,甚至在到過(guò)finally塊之前有一個(gè)return語(yǔ)句,finally塊還是會(huì)執(zhí)行。21TraceaProgramExecutionanimationtry{statements;}catch(TheExceptionex){handlingex;}finally{

finalStatements;}Nextstatement;Supposenoexceptionsinthestatements22TraceaProgramExecutionanimationtry{statements;}catch(TheExceptionex){handlingex;}finally{

finalStatements;}Nextstatement;Thefinalblockisalwaysexecuted23TraceaProgramExecutionanimationtry{statements;}catch(TheExceptionex){handlingex;}finally{

finalStatements;}Nextstatement;Nextstatementinthemethodisexecuted24TraceaProgramExecutionanimationtry{statement1;statement2;statement3;}catch(Exception1ex){handlingex;}finally{

finalStatements;}Nextstatement;SupposeanexceptionoftypeException1isthrowninstatement225TraceaProgramExecutionanimationtry{statement1;statement2;statement3;}catch(Exception1ex){handlingex;}finally{

finalStatements;}Nextstatement;Theexceptionishandled.26TraceaProgramExecutionanimationtry{statement1;statement2;statement3;}catch(Exception1ex){handlingex;}finally{

finalStatements;}Nextstatement;Thefinalblockisalwaysexecuted.27TraceaProgramExecutionanimationtry{statement1;statement2;statement3;}catch(Exception1ex){handlingex;}finally{

finalStatements;}Nextstatement;Thenextstatementinthemethodisnowexecuted.28TraceaProgramExecutionanimationtry{statement1;statement2;statement3;}catch(Exception1ex){handlingex;}catch(Exception2ex){handlingex;throwex;}finally{

finalStatements;}Nextstatement;statement2throwsanexceptionoftypeException2.29TraceaProgramExecutionanimationtry{statement1;statement2;statement3;}catch(Exception1ex){handlingex;}catch(Exception2ex){handlingex;throwex;}finally{

finalStatements;}Nextstatement;Handlingexception30TraceaProgramExecutionanimationtry{statement1;statement2;statement3;}catch(Exception1ex){handlingex;}catch(Exception2ex){handlingex;throwex;}finally{

finalStatements;}Nextstatement;Executethefinalblock31TraceaProgramExecutionanimationtry{statement1;statement2;statement3;}catch(Exception1ex){handlingex;}catch(Exception2ex){handlingex;throwex;}finally{

finalStatements;}Nextstatement;Rethrowtheexceptionandcontrolistransferredtothecaller32何時(shí)使用異常異常處理可以將錯(cuò)誤處理代碼從正常的編程任務(wù)中分離出來(lái),使程序容易閱讀和修改。然而,由于異常處理需要初始化新的異常對(duì)象,并重新返回調(diào)用堆棧,并且通過(guò)方法調(diào)用鏈傳播異常,以便捕獲異常,所以通常情況下異常處理需要更多的時(shí)間和資源。33什么時(shí)候拋出異常一個(gè)方法出現(xiàn)異常時(shí),如果想讓方法的調(diào)用者處理異常,應(yīng)該創(chuàng)建一個(gè)異常對(duì)象并將其拋出。如果能在發(fā)生異常的方法中處理異常,那么就

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論