C 異常處理 多重catch塊

2021-09-08 00:21:29 字數 1312 閱讀 7192

有時候只使用乙個異常處理不完全解決程式**現的異常,需要多個異常處理,這就需要多重catch來實現。

一段**可能會生成多個異常當引發異常時,會按順序來檢視每個 catch 語句,並執行第乙個型別與異常型別匹配的語句執行其中的一條 catch 語句之後,其他的 catch 語句將被忽略。

多重catch語法如下:

try catch(arrayindexoutofbound***ception e) catch(exception e)

注意:1. 一段**可能會生成多個異常

2. 當引發異常時,會按順序來檢視每個 catch 語句,並執行第乙個型別與異常型別匹配的語句

3. 執行其中的一條 catch 語句之後,其他的 catch 語句將被忽略。

特別注意:在一系列catch語句中,異常子類應該位於其父類之前。否則,不但會產生不能實現的**,而且將發生編譯錯誤。

如我們在上文例項中:0作為除數則會引發dividebyzeroexception型別的異常,上例中的catch語句可以作如下修改:

catch(dividebyzeroexception e)

",e);

} catch(exception e)

",e);

}為什麼還要加上乙個catch(exception e)子句呢?原因很簡單,catch(dividebyzeroexception e)子句只能捕獲特定的異常,try內的程式**可能還會產生其它的異常,這些異常只能由catch(exception e)來捕獲了。

存在多個catch時,try塊**現異常後,系統將從距離try塊最近的catch塊中查詢相應的異常處理語句,如果匹配成功,就執行catch塊中的異常處理語句,執行完之後,不再執行其他catch塊中的異常處理語句,這個查詢過程是從上到下的,主要是檢查catch後面括號中的異常物件是否和系統捕獲到的異常相容。上面語句中有兩個catch塊,其中後面乙個異常處理中exception是所有異常類的基類,其能夠相容任何異常物件。如果把exception放在try後面的第乙個catch塊中,則其後面的所有catch語句不能被執行,所以通常把具體的異常放在前面,把基類放在最後的catch塊中。

基類可以捕獲所有異常,我們可能會想:既然基類可以捕獲所有異常,是不是只寫乙個exceotion就可以解決問題了呢?在實際應用中,一般不會這樣處理。打一比方,一所綜合性醫院有很多科室,每個科專門處理不同的病情,眼科醫生擅長眼睛方面疾病,可以把exception看做全科醫生,名個派生的基類分別屬於不同的專業科室,去醫院看病總是選擇最匹配的科室,為眼睛首先會選擇眼科,而不會去找全科醫生,雖然全科醫生也是可以治眼病,但是畢竟不夠專業。在異常處理中,也是首先選擇各個專業的異常類,exception放在最後。

C 異常處理入門 try和catch

目錄 開發程式是一項 燒腦 的工作,程式設計師不但要經過長期的知識學習和思維訓練,還要做到一絲不苟,注意每乙個細節和邊界。即使這樣,也不能防止程式出錯。專家指出,長期作息不規律 用腦過度的危害很大,可能會誘發神經衰弱 失眠等疾病。我就是受害者之一,曾被失眠困擾了好幾年,不但入睡困難,還容易早醒。程式...

C 異常型別以及多級catch

首先來回顧一下上節講到的 try catch 的用法 trycatch exceptiontype variable 我們還遺留下乙個問題,就是 catch 關鍵字後邊的exceptiontype variable,這節就來詳細分析一下。exceptiontype是異常型別,它指明了當前的 catc...

C 學習39 異常處理入門(try和catch)

編譯器能夠保證 的語法是正確的,但是對邏輯錯誤和執行時錯誤卻無能為力,例如除數為 0 記憶體分配失敗 陣列越界等。這些錯誤如果放任不管,系統就會執行預設的操作,終止程式執行,也就是我們常說的程式崩潰 crash 優秀的程式設計師能夠從故障中恢復,或者提示使用者發生了什麼 不負責任的程式設計師放任不管...