異常
Throwable(拋)
- Exception 凡是能夠用代碼去糾正的就是異常
- 分類
- 編譯期異常——檢查異常CheckedException
- 運行時異常——不檢查異常UncheckEeception
- RuntimeException
- Error 不能用代碼去解決的就是錯誤,錯誤不是異常。例如:硬件問題,環境問題。
- 異常的產生和處理機制
處理
- 提前判斷
- try…catch
- 語法上:只有以下三種
- try - catch
- try - finally //只有exit()能結束。
- try - catch - finally
- 拋出去
- finally關鍵字
捕獲異常
- try{ //try後面允許接多個catch
- 正常邏輯下有可能發生異常的代碼
- }catch(異常類型){
- 處理代碼}finally{
- 不管是否發生異常,都必須要執行的代碼寫在finally
- 就算是retuen\break等跳轉語句,也要先執行finally,再跳轉
- 除了exit(),可以退出,其他都不能
- 往往是資源的清理,通道的關閉,各種連接用完後的關閉才使用
}
當兩個異常有繼承關係時,子類的catch寫前面,父類的寫後面
throw是寫在方法體中,後面接的是一個異常對象,一旦執行到這句代碼就會真正的發生異常拋出的動作
- throws是寫在方法聲明的最後,後面跟的是異常類的類名,可以跟多個,中間用逗號分隔,是警告方法的調用者,本方法有可能出現警告異常。
- 當throw後面跟的是一個運行時異常時,並不要求寫throws,即使寫了,使用者也不會受到警告
- 但是throw是編譯時異常(包括Exception),就必須在聲明部分加throws
分層架構
- 三層結構 //一層一層向上拋
- 界面
- 業務層
- 業務處理
- 持久層/持久訪問層
- 完成數據庫操作/CRUD操作
Throwable的兩個類
- getMessage
- printStackTrace
自定義異常
**繼承**Exception或者Throwable
- 書寫帶參構造,將已發生的異常對象的信息封裝到自定義異常對象身上
- 業務異常虛擬機不一定報異常,書寫帶參構造,將業務異常信息裝入自定義異常對象身上
- 添加自定義異常的特有方法