java之JAVA異常

凌.風發表於2014-12-22
異常的分類

1、 編譯時被檢測異常:只要是Exception和其子類都是,除了特殊子類RuntimeException體系。

        此類異常在處理時必須進行宣告或進行捕捉
        這種問題一旦出現,希望在編譯時就進行檢測,讓這種問題有對應的處理方式。
        這樣的問題,都可以針對性的處理。
    
2、編譯時不檢測異常(執行時異常):就是Exception中的RuntimeException體系和其子類。
          此類異常可以在程式碼中不進行處理
           這種問題的發生,無法讓功能繼續,運算無法進行,更多是因為呼叫者的原因導致的或者引發的內部狀態的改變導致的。那麼這種問題一般不處理,直接編譯通過,在執行時讓呼叫時的程式強制停止,讓呼叫者對程式碼進行修正。
所以,自定義異常的時候,要麼繼承Exception ,要麼繼承RuntimeException
 
throws  和 throw 的區別
1、throws 使用在函式上。
      throw 使用在函式內。
2、throws丟擲的是異常類,可以丟擲多個,用逗號隔開。
     throw丟擲的是異常物件,只能丟擲一個。
 
異常處理的捕捉形式
這是可以對異常進行鍼對性處理的方式。
具體格式是:
try{
     需要被檢測異常的程式碼
}
catch(異常類 變數) {    該變數用於接收發生的異常物件
        真正處理該異常的程式碼
}
finally{   //通常用於關閉、釋放資源。
      一定會被執行的程式碼
}
只有當使用System.exit(0)來進行顯示呼叫退出jvm函式的時候,finally程式碼才不會被執行
 
當程式能夠進行處理的時候就使用try   catch
當程式處理不了的時候就使用throw ,拋給呼叫者
 
常用方法:
getMessage()
物件本身e,即e.toString() 預設呼叫此方法
printStackTrace()   這個方法為jvm的預設異常處理機制
 
 
當一個try對應多個catch的時候,對應異常的子類放在上邊,父類放在下邊。
 
 
異常處理的原則
1,函式內部如果丟擲需要檢測的異常,那麼函式上必須要生命。
     否則必須在函式內用try catch捕捉,否則編譯失敗。
2,如果呼叫到了宣告異常的函式,要麼try catch 要麼throws,否則編譯失敗。
3,什麼時候try catch,什麼時候throws
        功能內部可以解決的用catch
        解決不了,用throws告訴呼叫者,由呼叫者解決。
4,一個功能如果丟擲了多個異常,那麼呼叫時,必須有對應的多個catch進行鍼對性的處理。
        內部有幾個需要檢測的異常,就拋幾個異常。丟擲幾個就catch幾個,不要多也不要少。
 
try catch finally 程式碼塊組合特點:
1,try catch finally  
        完整組合
2,try catch(多個), 當沒有必要資源需要釋放時,可以不用定義finally
 
3,try finally  沒有catch,此時對異常的處理應為throws ,宣告丟擲。
        異常無法直接catch處理,但是資源需要關閉。
    
異常的注意事項:
1,子類在覆蓋父類方法時,父類的方法如果丟擲了異常,那麼子類的方法只能丟擲父類的異常或者該異常的子類。
例:
class A extends Exception
{}
class B extends A
{}
class C extends Exception
{}
 
class Fu
{
    void show() throws A {}
}
class Zi extends Fu
{
void show() 可以throws A  或者throws B  也可以不拋,try 上,但是不能丟擲C
}
 
2,如果父類異常丟擲多個異常,那麼子類只能丟擲父類異常的子集
        子類覆蓋父類,只能丟擲父類的異常或者子類或者子集
    注意:如果父類的方法沒有丟擲異常,那麼子類覆蓋時絕對不能丟擲異常,只能try
例:
interfate Inter{
 void function();
}
class D implements Inter 
{
     public void function();//throws Exception 這裡是不可以丟擲異常的
{}
}
 
 
 
 
 
 
 

相關文章