java 異常必須知道的基礎東西(轉)

langgufu314發表於2012-03-22

1、什麼是異常?描述下異常處理流程?
異常;程式在執行過程中發生的不正常的情況,是描述出錯資訊的物件,通過異常處理機制可以增加程式的健壯性和可靠性。異常的處理流程;先執行try中的程式碼,沒有異常執行完try後,繼續執行try catch後面的程式碼,有異常發生,那麼終止try後面的程式碼,轉而執行catch中的程式碼,然後執行try catch後面的程式碼。


2、異常框架的類結構?
首先一個父類Throwable 是所有異常情況的父類,Throwable中有兩個子類,一個是Error錯誤,可捕獲不可處理,就像電腦藍屏。另一個子類是Exccption是異常,可以捕獲也可以處理,Exccption下面有很多異常的子類


3、checked異常與unchecked異常的區別是什麼?
編譯期異常在編譯時發生,必須捕獲,否則無法通過編譯
執行期異常在執行時發生,可捕獲也可以不捕獲

4、 Error和Exception的區別是什麼?

Error是錯誤,可捕獲,但是不可以處理,就像電腦藍屏
Exception是異常,可以捕獲也可以處理,就像電腦中了病毒後可以查殺病毒。

5、異常捕獲的流程?如果有異常發生是怎樣的流程?
先執行try中的程式碼,沒有異常執行完try後,繼續執行try catch後面的程式碼,有異常發生,那麼終止try後面的程式碼,轉而執行catch中的程式碼,然後執行try catch後面的程式碼。



6、如果try塊中有多種異常,在catch塊中如何處理?
如果在try中有多種異常,那麼終止try塊中的程式碼,轉而執行catch塊中的程式碼,異常發生時會找到catch塊中的第一個合適的異常,後面的全部忽略。

7、如果要丟擲異常怎麼做?
throw new java.lang.NauIpointerExceptin();
}丟擲異常


8、throw和throws的區別

throw是語句,表示通過程式碼方式丟擲一個異常
throws是方法的修飾符,表示方法不處理異常,異常由呼叫方來處理

9、try {}裡有一個return語句,那麼緊跟在這個try後的finally {}裡的程式碼會不會被執行,什麼時候被執行?
會,如果在指向中有return跳出方法,那麼finally同樣執行,在跳出方法欠執行


10、finally的作用是什麼?一般在什麼時候使用?
無論是否有異常都會執行,一般用於系統資源回收

11、finally是不是什麼時候都會執行?
不是,在虛擬機器關閉時不會執行,system。exit(0);

12、Try塊中是否所有的語句都一定會執行,為什麼?
不會,當try中出現異常時,try中出現異常語句後面的語句將不會執行,轉而去執行catch中的語句。

13、怎麼樣判斷一個異常類是checked異常還是unchecked異常?

執行期異常有一個共同的父類RuntimeException,如果是RuntimeException的子類,那麼就是執行期異常,如果不是就是編譯期異常。

 

14.子類override父類的某個方法時,throws宣告的異常只能小於等於父類方法,若出現了新異常,則不可throws來宣告丟擲異常,而是可以在方法中通過try catch來捕獲並處理。

 

15,子類建構函式throws異常大於等於父類建構函式。

 

16,檢查性異常------程式正確,但因為外在的環境條件不滿足引發。例如:使用者錯誤及I/O問題----程式試圖開啟一個並不存在的遠端Socket埠。這不是程式本身的邏輯錯誤,而很可能是遠端機器名字錯誤(使用者拼寫錯誤)。對商用軟體系統,程式開發者必須考慮並處理這個問題。JAVA編譯器強制要求處理這類異常,如果不捕獲這類異常,程式將不能被編譯。

執行期異常------這意味著程式存在bug,如陣列越界,0被除,入參不滿足規範.....這類異常需要更改程式來避免,JAVA編譯器不強制要求處理這類異常。

錯誤------一般很少見,也很難通過程式解決。它可能源於程式的bug,但一般更可能源於環境問題,如記憶體耗盡。錯誤在程式中無須處理,而有執行環境處理。

相關文章