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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

8RuntimeExceptionsRuntimeException

描述編程錯誤,比如不合適的轉換。運行異常通常由Java虛擬機拋出。9必檢異常和免檢異常RuntimeException,Error

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

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

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

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

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

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

finalStatements;}有時,不論異常是否出現(xiàn)或者是否被捕獲,都希望執(zhí)行某些代碼??捎胒inally子句。在任何情況下,finally塊中的代碼都會執(zhí)行,不管try塊中是否出現(xiàn)異?;蛘呤欠癫东@了異常,甚至在到過finally塊之前有一個return語句,finally塊還是會執(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何時使用異常異常處理可以將錯誤處理代碼從正常的編程任務中分離出來,使程序容易閱讀和修改。然而,由于異常處理需要初始化新的異常對象,并重新返回調用堆棧,并且通過方法調用鏈傳播異常,以便捕獲異常,所以通常情況下異常處理需要更多的時間和資源。33什么時候拋出異常一個方法出現(xiàn)異常時,如果想讓方法的調用者處理異常,應該創(chuàng)建一個異常對象并將其拋出。如果能在發(fā)生異常的方法中處理異常,那么就

溫馨提示

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

評論

0/150

提交評論