1. 程式人生 > >第六十五條 不要忽略異常

第六十五條 不要忽略異常

不要忽略異常,這條建議看上去很容易,但我們程式碼中卻常常能看到反例。當api的設計中宣告某些方法中會丟擲某個異常時,它們往往在說明一些情況,某些場景下可能會發生異常,所以,我們不應該忽略它。忽略異常的方法很簡單,只要用個 try...catch 把它包裹起來就行了,並且 catch 裡面什麼都不寫。一旦這樣操作了,我們沒有針對異常情況做對應的邏輯處理,只是簡單的把它給忽略了,程式碼是不會崩潰了,但可能會造成邏輯或資料的錯誤。忽略異常猶如忽略火警訊號,我們把高鐵火警訊號器關掉了,平時抽菸或點個蠟燭蛋糕不會造成災難,不會報警,這個一般不會造成什麼災難;但如果高鐵一個車廂已經著火了,這時候火警訊號器仍舊沒報警,因為已經被關閉了,這是後沒人去救火,就會造成災難級別的事故。同理,每次見到空 catch 時,我們需要注意,最起碼要寫個宣告,解釋為什麼可以忽略這個異常。

有一種情形可以忽略異常,就是關閉FileInputStream的時候。因為還沒有改變檔案的狀態,所以不必執行任何恢復動作,並且我們已經從檔案中讀取到所需要的資訊,所以不必終止正在進行的操作。但是,在這種情況下,把異常記錄下來還是明智的做法,因為如果這些異常經常發生,我們就可以調查異常的原因。

以上建議同樣適用於受檢異常和未受檢異常。不管異常代表了可預見的異常條件,還是程式設計錯誤,用空的catch塊忽略它,會導致程式在遇到錯誤的情況下悄然的執行下去。然後,有可能在將來的某個點上,當程式不能再容忍與錯誤源明顯相關的問題時,他就會失敗,這是後的錯誤就可能很大了。正確的處理異常能夠徹底挽回始變,只要將異常傳播給外界,至少會導致程式迅速的失敗,從而保留了有助於除錯該失敗條件的資訊。