版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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語法錯誤,運行錯誤,邏輯錯誤我們學過程序有三類錯誤:語法錯誤,運行錯誤,邏輯錯誤。語法錯誤的原因是沒有遵循語言的規則,它們可以由編譯器檢查發現。在程序運行過程中,如果環境發現一個不可能執行的操作,就會出現運行錯誤。如果程序沒有按照預期的方案執行,就會發生邏輯錯誤不。本章主要介紹應用異常處理來處理運行錯誤。3運行錯誤Run4捕捉運行錯誤Run5異常類6系統錯誤系統錯誤由Java虛擬機拋出并在Error類中描述。這種錯誤很少發生,如果發生,除了通知用戶以及盡量穩妥地結束程序外,幾乎什么都不能做。7ExceptionsException
描述由程序和外部環境引起的錯誤,這些錯誤能通過程序捕獲和處理。
8RuntimeExceptionsRuntimeException
描述編程錯誤,比如不合適的轉換。運行異常通常由Java虛擬機拋出。9必檢異常和免檢異常RuntimeException,Error
和它們的子類都稱為免檢異常,因為這類異常可能在程序任何地方出現,為避免過多進行異常處理,Java語言不允許編寫捕獲或聲明免檢異常的代碼。
所有其他異常稱為必檢異常,意思是指編譯器會強制程序員檢查并處理它們。
10必檢異常和免檢異常Uncheckedexception.11聲明、拋出、捕捉異常12聲明異常每個方法都必須說明它可能拋出的必檢異常的類型,這稱為聲明異常。
publicvoidmyMethod()throwsIOExceptionpublicvoidmyMethod()throwsIOException,OtherException注:如果在父類中方法沒有聲明異常,那么在子類中不能對其進行覆蓋以聲明異常。13拋出異常程序檢查到一個錯誤后,創建一個適當類型異常的實例并拋出它,這稱為拋出異常。例如,thrownewTheException();TheExceptionex=newTheException();
throwex;注:JavaAPI中的每個異常類至少有兩個構造方法:一個無參構造方法和一個帶有String參數的構造方法。該參數用于描述異常,稱為異常信息,可以使用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塊能捕獲父類異常,它也能捕獲所有的子類異常。所以父類的異常塊不能出現在子類的catch塊前。17捕捉或聲明必檢異常Java強迫程序員處理必檢異常。如果方法聲明一個必檢異常,必須在try-catch塊中調用它或者在調用它的方法中聲明拋出異常。例如,假定方法p1調用方法p2,p2可能拋出一個必檢異常(如IOException),就要像下圖a或b那樣編寫代碼。18Example:聲明、拋出和捕捉異常Objective:本例演示如何聲明、拋出和捕獲異常。改寫例子7-3中的Circle2類的setRadius方法,如果半徑是負數,則拋出一個異常。TestCircleWithExceptionRunCircleWithException19重新拋出異常try{statements;}catch(TheExceptionex){performoperationsbeforeexits;throwex;}20finally
子句try{statements;}catch(TheExceptionex){handlingex;}finally{
finalStatements;}有時,不論異常是否出現或者是否被捕獲,都希望執行某些代碼。可用finally子句。在任何情況下,finally塊中的代碼都會執行,不管try塊中是否出現異常或者是否捕獲了異常,甚至在到過finally塊之前有一個return語句,finally塊還是會執行。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什么時候拋出異常一個方法出現異常時,如果想讓方法的調用者處理異常,應該創建一個異常對象并將其拋出。如果能在發生異常的方法中處理異常,那么就
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 機器制圖考核試題與標準答案
- 2026中國醫療廢棄物處理行業市場現狀供需研究投資評估規劃分析報告
- 2026中國物聯網行業技術發展與應用市場前景評估分析研究報告
- 2026中國智能家電行業市場現狀分析競爭布局評估規劃行業研究評估報告
- 自貢市自流井區2026年社會工作服務領域增量政策性崗位招募的(5人)考前沖刺密卷含答案詳解【研優卷】
- 2026中國醫藥流通行業市場現狀供應鏈結構競爭格局投資評估規劃報告
- 銀川市第六中學教師臨聘考前沖刺試卷附答案詳解【預熱題】
- 雅安市人民醫院招聘筆試題庫及參考答案詳解(預熱題)
- 簡單攝影試題及答案
- 數學應聘入職試題及對應答案
- 呼吸疾病真實世界研究的機械通氣策略優化
- 更年期綜合征職業壓力調節方案
- 2026屆北京理工大附中分校物理九年級第一學期期末質量跟蹤監視試題含解析
- 雨課堂在線學堂《創業管理四季歌:藝術思維與技術行動》單元考核測試答案
- 房頂建筑改造方案設計說明
- 2025年春季中國商飛公司校園招聘和年度社會招聘考前自測高頻考點模擬試題及答案詳解(名校卷)
- 行車便道施工方案
- 2025年鎮江護士考試題庫
- T/CSBME 077-2023一次性使用支氣管堵塞器
- 2025年高考作文素材積累之現實批判:“異化”
- 農村建房包工包料施工合同
評論
0/150
提交評論