
異常學習學習計劃Java SE 基礎 · 點2 異常一、總結本文通過自定義受檢異常與非受檢異常的小練習記錄 Java 異常繼承體系中最基礎的兩種分類以及super構造器調用、final字段初始化、toString()與getCause()信息獲取等要點。受檢異常對可能出現(xiàn)的異常給出應對方案進行兜底。非受檢異常優(yōu)化代碼內部邏輯減少業(yè)務流程中出現(xiàn)的異常。final修飾聲明字段時該類中所有構造器必須對其初始化。System.out.println(e)調用的是Throwable.toString()其格式通常為類名: 消息。它默認不包含 Cause 信息默認只會打印消息這時需要通過e.getXX()方法來獲取對應信息內容。二、代碼1. MyCheckedException.java —— 受檢異常繼承 ExceptionpublicclassMyCheckedExceptionextendsException{publicMyCheckedException(Stringmessage,Throwablecause){super(message,cause);}}2. MyUncheckedException.java —— 非受檢異常繼承 RuntimeExceptionpublicclassMyUncheckedExceptionextendsRuntimeException{//final字段必須在全部構造器中初始化privatefinalStringid;//編號//包含報錯idpublicMyUncheckedException(Stringid){super(未找到該id: id);this.idid;}//包含錯誤消息錯誤原因publicMyUncheckedException(Stringmessage,Throwablecause){super(message,cause);this.idnull;}//包含錯誤消息報錯id錯誤原因publicMyUncheckedException(Stringid,Stringmessage,Throwablecause){super(message,cause);this.idid;}publicStringgetId(){returnid;}}3. Main.java —— 測試主類importjava.io.IOException;publicclassMain{publicstaticvoidmain(String[]args){try{thrownewMyCheckedException(未知錯誤,newIOException(文件讀取失敗));}catch(MyCheckedExceptione){//System.out.println(e) 調用的是 Throwable.toString()其格式通常為 類名: 消息它默認不包含 Cause 信息System.out.println(e - e.getCause());}System.out.println();System.out.println(------拋出異常帶錯誤消息和錯誤原因------);a();System.out.println();System.out.println(------拋出異常帶報錯id錯誤消息錯誤原因------);b();System.out.println();System.out.println(------拋出異常帶報錯id------);c();System.out.println();}//拋出異常帶錯誤消息和錯誤原因staticvoida(){try{thrownewMyUncheckedException(未知錯誤1,newIOException(底層原因));}catch(MyUncheckedExceptione){System.out.println(e - e.getCause());}}//拋出異常帶報錯id錯誤消息錯誤原因staticvoidb(){try{thrownewMyUncheckedException(222,未知錯誤2,newIOException(底層原因));}catch(MyUncheckedExceptione){System.out.println(e - e.getId() - e.getCause());}}//拋出異常帶報錯idstaticvoidc(){try{thrownewMyUncheckedException(333);}catch(MyUncheckedExceptione){System.out.println(e);}}}三、運行結果