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或者父类。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。