自定义异常链处理

1.自定义项目异常

使用lombok自动生成无参和全部参数的构造方法,并生成对应字段的get和set方法

@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中捕获到了异常,打印的异常信息为:

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或者父类。

猜你喜欢

转载自blog.csdn.net/haitunlianren/article/details/74363806