寫程序的過程當中,咱們對try-catch在熟悉不過了,捕獲異常進行處理,以保證程序的健壯性。程序員
今日突發一想,若是咱們catch中的代碼異常了怎麼辦?咱們作如下一種假設日誌
static void Main(string[] args) { try{ //Code A } catch{ //Code B } finally{ //Code C } }
按照咱們平時常常用的,咱們在Code A的位置執行出錯以後,咱們最後可能在Code B進行錯誤處理,而後可能在Code C處寫錯誤日誌。blog
那麼問題來了,若是咱們由於某些不可預測的因素在Code B或者Code C處又出異常了怎麼辦?(雖然這種狀況我沒有遇到過,哈哈)string
那麼程序員以鑽牛角尖的態度實現瞭如下結構class
static void Main(string[] args) { try{ //Code A try{ //Code B } catch{ //Code C } finally{ //Code D } //Code E } catch{ //Code F } finally{ //Code G } }
按照這種結構,咱們在Code F和G的位置不寫任何代碼(不寫總不會異常吧?)或者寫上絕對無錯的代碼,主題代碼仍是在Code B的位置,C的位置異常處理,D的位置寫日誌。程序
那麼,就算catch和finally異常了,也會被外層的catch捕獲,這樣是否是就絕對的健壯了?異常