異常的分類
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 這裡是不可以拋出異常的
{}
}
通過Java程序抽取日志中的sql語句 http://www.linuxidc.com/Linux/2015-01/111347.htm
解密Java增強的泛型 http://www.linuxidc.com/Linux/2015-01/111360.htm
Java中介者設計模式 http://www.linuxidc.com/Linux/2014-07/104319.htm
Java 設計模式之模板方法開發中應用 http://www.linuxidc.com/Linux/2014-07/104318.htm
設計模式之 Java 中的單例模式(Singleton) http://www.linuxidc.com/Linux/2014-06/103542.htm
Java對象序列化 http://www.linuxidc.com/Linux/2014-10/107584.htm
大話設計模式(帶目錄完整版) PDF+源代碼 http://www.linuxidc.com/Linux/2014-08/105152.htm
Java中的函數傳遞 http://www.linuxidc.com/Linux/2014-11/109056.htm