Java Exception

 

1.什麼是Error

Error是指嚴重的系統錯誤,一般指與JVM相關的問題,如系統崩潰,JVM出錯,動態鏈接失敗,內存耗盡等。這類錯誤無法恢復或不可捕捉,將應用程序中斷。

2.什麼是Exception

異常是程序運行期間對例外情況(非正常情況)的處理方式。異常的作用是從錯誤中恢復信息,列出異常信息,對問題進行處理。

發生異常時,異常對象被自動提交給JVM,JVM尋找處理這一異常的方法,稱爲捕捉異常。如果找不到可又捕捉異常的方法,則應用系統中斷,java程序退出。

檢查性異常:java.lang.Exception

具體應用負擔的責任。

運行期異常:java.lang.RuntimeException

程序負擔的責任。

錯誤:java.lang.Error

JVM負擔的責任。

 

3.throw 和 throws

throws聲明。如何得知方法會拋出異常,方法聲明中有throws語句。

throw拋出異常。

4.拋出與捕捉

編寫可能會拋出異常的方法時,必須聲明異常。

調用可能會拋出異常的方法時,必須捕捉異常。

處理異常情況:把調用放在try/catch塊中,將異常處理/恢復程序放在catch塊中。

 

5.受檢異常

受檢異常是程序運行時由外界因素造成的。

編譯器會檢查除RuntimeException外的異常。確定調用者瞭解調用的方法是有異常的。如ClassNotFoundException,FileNotFoundException,IOException,SQLException.

6.非受檢異常RuntimeException

非受檢異大部分是由於程序邏輯造成的,程序員應該積極避免。如ClassCastException,ArrayIndexOutOfBoundsException,NullPointerException,ArithmeticException(除0異常)。

7.try、catch、finally

程序正常運行時,執行try塊中的內容,不執行catch的內容。

程序某行發生異常時,其後的程序不再執行,而執行catch塊。

finally是無論發生異常與否都會執行。如果try/catch中有return指令,finally還是會執行,流程會跳到finally再回到return語句。

8.多重異常

發生哪種類型的異常,執行哪個異常塊。如發生B類異常,則執行b。

如果發生B類異常,e會不會執行?不會,JVM從頭開始找到符合的catch塊,找到後就會知道其餘的都是沒用的。

try{
...

}catch(AException a){

...
}catch(BException b){

...
}catch(Exception e){

...
}

9.異常的多態

異常也是對象,可以以異常的父類型來聲明拋出的異常。比如,上述例子中可以只有最後一個catch塊。

什麼時候用多態呢?如果兩種異常的處理方式不同,則分開寫,這樣更容易知道發生的是哪種異常。如果兩種異常處理方式相同,則可以用多態聲明父類異常。

10.duck 聲明

當A調用的方法B有異常時,可以選擇不去catch,而把異常duck掉讓調用A方法的C去catch。也就是不處理異常,一直往上拋,但是當main方法也不去catch這些異常(也就是直接duck掉)時,jvm只好中斷。

 

http://lavasoft.blog.51cto.com/62575/18920/轉:

1、避免過大的try塊,不要把不會出現異常的代碼放到try塊裏面,儘量保持一個try塊對應一個或多個異常。
2、細化異常的類型,不要不管什麼類型的異常都寫成Excetpion。
3、catch塊儘量保持一個塊捕獲一類異常,不要忽略捕獲的異常,捕獲到後要麼處理,要麼轉譯,要麼重新拋出新類型的異常。
4、不要把自己能處理的異常拋給別人。
5、不要用try...catch參與控制程序流程,異常控制的根本目的是處理程序的非正常情況。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章