Java SE 基础 · 点2 异常
异常学习学习计划Java SE 基础 · 点2 异常一、总结本文通过自定义受检异常与非受检异常的小练习记录 Java 异常继承体系中最基础的两种分类以及super构造器调用、final字段初始化、toString()与getCause()信息获取等要点。受检异常对可能出现的异常给出应对方案进行兜底。非受检异常优化代码内部逻辑减少业务流程中出现的异常。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);}}}三、运行结果