一
结构
Throwable分为Exception和error
Exception分为RuntimeException(运行时异常)和其他异常
主动抛出运行时异常和非运行时异常的区别
1、throw RuntimeException(或运行时异常的子类) 编译时不会报错。
2、throw Exception 编译时会报错。
原因:正如他们的名字一样,运行时异常会在运行时检查,因为Exception既包含运行时异常和其他异常,因此他即会在编译时检查,也会在运行时检查。
二
抛异常时的区别
方式一、在方法上加上 throws Exception
方式二、try-catch后在catch里加上 throw exception/Throwable
区别:
1、在日志报错时会在try-catch的地方定位错误,如果一个方法中 加上了 throws Exception,那么报错日志不会在这里定位错误。
既然catch了异常了,为什么还要抛出呢?
原因:
1、首先就跟上面的这个区别解释的一样,这样的写法相比于方法上加上 throws exception,它可以在日志中定位异常
2、其次,一般开发者在这里抛出的exception一般都是自己通过继承RuntimeException定义的异常,在日志中可以明显的显示errorMessage和errorCode,再加上全局异常捕获的话,可以直接在接口返回该errorCode和errorMessage。
什么时候用throws Exception?什么时候用 try-catch throw exception呢?
应用场景一:在写工具类时,在一个方法最上层try-catch throw exception,该方法的被调用方法都建议写 throws Exception,maven包同理。