1。什么是異常
???異常是一種狀態,是程序出現了符合該異常條件的一種狀態。因此,他也可以說成是一種條件。
2。為什么要捕獲異常
? 捕獲異常是為了對程序中出現的某種狀況進行處理。如果有異常而沒有捕獲,異常將會向上一層傳播,最終導致線程在此中止。
3。什么是check異常和unchecked異常
? uncheck異常一般是RuntimeException.出現這類異常,編譯器不會強制要用戶去捕獲(當然你可以捕獲)。?? 編譯器會強制要求用戶對checked異常進行捕獲并作出一定的處理。
4。為什么不推薦捕獲頂層異常(Exception)
? 程序中會發生各種各樣的異常。除非你的程序是個終端(一個業務的終點),否則不推薦捕獲頂層異常。
?在程序的中間環節捕獲所有異常毫無意義,并有可能導致流程上的隱患。比如,出現某種異常后,期望線程就此結束,不去做下面的工作,但是如果在中間環節對頂層異常進行了非法處理,程序有可能會運行下去,將導致不可控的錯誤。
5。為什么要自定義異常
?自定義異常是為了設置異常鏈的起點。一般情況下,我們都是允許每個程序員看到所有的異常信息,這個時候大多數都是把下一層的異常直接重擲到上一層。然而在多層次的結構中,我們有時候需要隱藏底層異常(這種異常的信息很多,很枯燥),而給消費者提供一個更為直觀的異常,這個時候我們需要自定義異常。有的異常類jdk已經給我們提供,比如常用的IllegalArgumentException。如果你想在此再作包裝,你可以創建自己的異常類。如此,消費者將以此異常作為異常鏈的起點。
6。為什么要重擲異常
?重擲異常是處理異常的一種方式。在捕獲了某種異常后,用戶可能不希望在這一層做出裁決,或者即使做出了一定的處理,但仍然需要向上一層報告,因此需要重擲異常。
7。異常機制。
?? 一旦某個點發生異常,這個點下面和catch語句之間的代碼將不會被執行。因此,異常是一種中止流程的很有效的機制。
?? 關于異常,在effective java中提到“異常轉譯”和“異常連接”的概念。本人傾向于用“異常轉譯”,前提是要配置log4j,并作詳細的日志紀錄。