JAVA異常
throwable
error
exception
runtimeException
- jvm運行時異常,換句話說jvm在編譯時不會檢查,直至運行時纔會拋出
- jvm認爲這類異常可以不處理
ckecked Exception
- jvm在編譯時會檢查checked exceptioException,如果程序未處理該異常,無法通過編譯
- jvm認爲這類異常必須處理
異常分類
異常處理
try-catch-finally
try-with-resource
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
......
}
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(path));
......
} finally {
br.close();
}
- try執行結束後,會自動執行資源的close方法
- 資源必須實現java.lang.AutoCloseable接口或java.io.Closeable接口
finally
- 在程序不退出的情況下,走完try/catch一定會執行finally
finally會導致異常丟失
- finally中的return/throw會覆蓋try/catch中的return/throw
- 因此,建議finally僅做資源回收,不要涵蓋業務邏輯
throw
- 方法內部拋出異常
- throw等同於return, 因此和return不能共存
throws
特殊技巧:將checkedException包裝成RuntimeException
- 使用場合
- 父類未拋出異常,理論上子類的異常範圍應小於父類,如果子類中拋出範圍更大或其他類型的checkedException,爲了避免編譯錯誤,可以將該異常包裝成RuntimeException
- Spring框架對JDBC數據源連接的處理。java程序通過jdbc連接數據庫時,需要處理很多checkedException。Spring在封裝jdbc數據源連接時,爲了避免將checkedException拋出給用戶處理,將這些異常封裝成了RuntimeException。