自定義異常鏈處理

1.自定義項目異常

使用lombok自動生成無參和所有參數的構造方法,並生成對應字段的get和set方法spa

@Data
@AllArgsConstructor
@NoArgsConstructor
public class MyException extends  Exception{
    private int code;
    private String errorMessage;
}

2.異常鏈處理

/**
 * 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或者父類。繼承

相關文章
相關標籤/搜索