Java异常处理深入理解_关于java异常处理机制的深入理解.doc
關于java異常處理機制的深入理解.doc
關于JAVA異常處理機制的深入理解1引子TRYCATCHFINALLY恐怕是大家再熟悉不過的語句了,而且感覺用起來也是很簡單,邏輯上似乎也是很容易理解。不過,我親自體驗的“教訓”告訴我,這個東西可不是想象中的那么簡單、聽話。不信那你看看下面的代碼,“猜猜”它執(zhí)行后的結(jié)果會是什么不要往后看答案、也不許執(zhí)行代碼看真正答案哦。如果你的答案是正確,那么這篇文章你就不用浪費時間看啦。PACKAGEMYEXAMPLETESTEXCEPTIONPUBLICCLASSTESTEXCEPTION{PUBLICTESTEXCEPTION{}BOOLEANTESTEXTHROWSEXCEPTION{BOOLEANRETTRUETRY{RETTESTEX1}CATCHEXCEPTIONE{SYSTEMOUTPRINTLN“TESTEX,CATCHEXCEPTION“RETFALSETHROWE}FINALLY{SYSTEMOUTPRINTLN“TESTEX,FINALLYRETURNVALUE“RETRETURNRET}}BOOLEANTESTEX1THROWSEXCEPTION{BOOLEANRETTRUETRY{RETTESTEX2IFRET{RETURNFALSE}SYSTEMOUTPRINTLN“TESTEX1,ATTHEENDOFTRY“RETURNRET}CATCHEXCEPTIONE{SYSTEMOUTPRINTLN“TESTEX1,CATCHEXCEPTION“RETFALSETHROWE}FINALLY{SYSTEMOUTPRINTLN“TESTEX1,FINALLYRETURNVALUE“RETRETURNRET}}BOOLEANTESTEX2THROWSEXCEPTION{BOOLEANRETTRUETRY{INTB12INTCFORINTI2I2I{CB/ISYSTEMOUTPRINTLN“I“I}RETURNTRUE}CATCHEXCEPTIONE{SYSTEMOUTPRINTLN“TESTEX2,CATCHEXCEPTION“RETFALSETHROWE}FINALLY{SYSTEMOUTPRINTLN“TESTEX2,FINALLYRETURNVALUE“RETRETURNRET}}PUBLICSTATICVOIDMAINSTRINGARGS{TESTEXCEPTIONTESTEXCEPTION1NEWTESTEXCEPTIONTRY{TESTEXCEPTION1TESTEX}CATCHEXCEPTIONE{EPRINTSTACKTRACE}}}你的答案是什么是下面的答案嗎I2I1TESTEX2,CATCHEXCEPTIONTESTEX2,FINALLYRETURNVALUEFALSETESTEX1,CATCHEXCEPTIONTESTEX1,FINALLYRETURNVALUEFALSETESTEX,CATCHEXCEPTIONTESTEX,FINALLYRETURNVALUEFALSE如果你的答案真的如上面所說,那么你錯啦。_,那就建議你仔細看一看這篇文章或者拿上面的代碼按各種不同的情況修改、執(zhí)行、測試,你會發(fā)現(xiàn)有很多事情不是原來想象中的那么簡單的。現(xiàn)在公布正確答案I2I1TESTEX2,CATCHEXCEPTIONTESTEX2,FINALLYRETURNVALUEFALSETESTEX1,FINALLYRETURNVALUEFALSETESTEX,FINALLYRETURNVALUEFALSE2基礎知識21相關概念例外是在程序運行過程中發(fā)生的異常事件,比如除0溢出、數(shù)組越界、文件找不到等,這些事件的發(fā)生將阻止程序的正常運行。為了加強程序的魯棒性,程序設計時,必須考慮到可能發(fā)生的異常事件并做出相應的處理。C語言中,通過使用IF語句來判斷是否出現(xiàn)了例外,同時,調(diào)用函數(shù)通過被調(diào)用函數(shù)的返回值感知在被調(diào)用函數(shù)中產(chǎn)生的例外事件并進行處理。全程變量ERRONO常常用來反映一個異常事件的類型。但是,這種錯誤處理機制會導致不少問題。JAVA通過面向?qū)ο蟮姆椒▉硖幚砝狻T谝粋€方法的運行過程中,如果發(fā)生了例外,則這個方法生成代表該例外的一個對象,并把它交給運行時系統(tǒng),運行時系統(tǒng)尋找相應的代碼來處理這一例外。我們把生成例外對象并把它提交給運行時系統(tǒng)的過程稱為拋棄THROW一個例外。運行時系統(tǒng)在方法的調(diào)用棧中查找,從生成例外的方法開始進行回朔,直到找到包含相應例外處理的方法為止,這一個過程稱為捕獲CATCH一個例外。22THROWABLE類及其子類用面向?qū)ο蟮姆椒ㄌ幚砝?#xff0c;就必須建立類的層次。類THROWABLE位于這一類層次的最頂層,只有它的后代才可以做為一個例外被拋棄。圖1表示了例外處理的類層次。從圖中可以看出,類THROWABLE有兩個直接子類ERROR和EXCEPTION。ERROR類對象(如動態(tài)連接錯誤等),由JAVA虛擬機生成并拋棄(通常,JAVA程序不對這類例外進行處理);EXCEPTION類對象是JAVA程序處理或拋棄的對象。它有各種不同的子類分別對應于不同類型的例外。其中類RUNTIMEEXCEPTION代表運行時由JAVA虛擬機生成的例外,如算術運算例外ARITHMETICEXCEPTION由除0錯等導致、數(shù)組越界例外ARRAYINDEXOUTOFBOUNDSEXCEPTION等;其它則為非運行時例外,如輸入輸出例外IOEXCEPTION等。JAVA編譯器要求JAVA程序必須捕獲或聲明所有的非運行時例外,但對運行時例外可以不做處理。圖1例外處理的類層次23異常處理關鍵字JAVA的異常處理是通過5個關鍵字來實現(xiàn)的TRY,CATCH,THROW,THROWS,FINALLY。JB的在線幫助中對這幾個關鍵字是這樣解釋的THROWSLISTSTHEEXCEPTIONSACOULDTHROWTHROWTRANSFERSCONTROLOFTHETOTHEEXCEPTIONHANDLERTRYOPENINGEXCEPTIONHANDLINGSTATEMENTCATCHCAPTURESTHEEXCEPTIONFINALLYRUNSITSCODEBEFORETERMINATINGTHEPROGRAM231TRY語句TRY語句用大括號{}指定了一段代碼,該段代碼可能會拋棄一個或多個例外。232CATCH語句CATCH語句的參數(shù)類似于方法的聲明,包括一個例外類型和一個例外對象。例外類型必須為THROWABLE類的子類,它指明了CATCH語句所處理的例外類型,例外對象則由運行時系統(tǒng)在TRY所指定的代碼塊中生成并被捕獲,大括號中包含對象的處理,其中可以調(diào)用對象的方法。CATCH語句可以有多個,分別處理不同類的例外。JAVA運行時系統(tǒng)從上到下分別對每個CATCH語句處理的例外類型進行檢測,直到找到類型相匹配的CATCH語句為止。這里,類型匹配指CATCH所處理的例外類型與生成的例外對象的類型完全一致或者是它的父類,因此,CATCH語句的排列順序應該是從特殊到一般。也可以用一個CATCH語句處理多個例外類型,這時它的例外類型參數(shù)應該是這多個例外類型的父類,程序設計中要根據(jù)具體的情況
總結(jié)
以上是生活随笔為你收集整理的Java异常处理深入理解_关于java异常处理机制的深入理解.doc的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Pytorch神经网络理论篇】 06
- 下一篇: 【Pytorch神经网络实战案例】10