使用lombok自動生成無參和所有參數的構造方法,並生成對應字段的get和set方法code
@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中捕獲到了異常,打印的異常信息爲:對象
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或者父類。get