使用lombok自动生成无参和所有参数的构造方法,并生成对应字段的get和set方法spa
@Data @AllArgsConstructor @NoArgsConstructor public class MyException extends Exception{ private int code; private String errorMessage; }
/** * dao层 * / public class MyDao { public void getUserInfo() throws MyException{ throw new MyException(2,"request param error"); } }
/** * service层 * / public class MySerivice { public void getUserInfo() throws Throwable{ MyDao myDao = new MyDao(); myDao.getUserInfo(); } }
public class TTService { public static void main(String[] args){ MySerivice mySerivice = new MySerivice(); try { mySerivice.getUserInfo(); }catch (MyException myException){ System.err.println("myException:"+myException.getCode()+"/"+myException.getErrorMessage()); }catch (Exception excepiton){ System.err.println("excepiton:"+excepiton.getMessage()); }catch (Throwable throwable){ System.err.println("throwable:"+throwable.getMessage()); } } }
运行执行以后,在TTService的MyException中捕获到了异常,打印的异常信息为:code
myException:2/request param error
咱们在MySerivice抛出的异常变为 Throwable(aop切面抛出的异常的就是Throwable)而不是MyException,到了TTService最终捕获到的仍是咱们最初的抛出的MyException类型。
(虽然MySerivice抛出父类Throwable,其实父类引用指向子类对象MyException,最终捕获的也就是子类的异常对象MyException)。对象
从上图中咱们能够看出,MyException是Exception的子类,而Exception又是Throwable的子类。
咱们经过throw抛出异常MyExcepiton,方法经过throws一层层往上抛出的异常要大于等于异常MyExcepiton,也就是说throws抛出的异常必须是MyExcepiton或者父类。继承