Java 异常分类
![0212fab939e32c53e1aedf3ba59e8a0e.png](https://img-blog.csdnimg.cn/img_convert/0212fab939e32c53e1aedf3ba59e8a0e.png)
Throwable类有两个直接子类:
- Exception:出现的问题是可以被捕获的;
- Error:系统错误,通常由JVM处理。
可捕获的异常又可以分为两类:
(1)checked异常: 直接派生自Exception的异常类,必须被捕获或再次声明抛出。
- 无能为力、引起注意型 --- 如SQLException(字段超长),只需要保存异常线程,人工介入解决。
- 可以处置型 --- 如发生未授权异常(UnAuthorizedException),可以跳转至权限申请页面。
(2)unchecked异常( RuntimeException):派生自RuntimeException的异常类。使用throw语句可以随时抛出这种异常对象。
throw new ArithmeticException(…);
- 可预测异常(Predicted Exception)--- 如IndexOutOfBoundsException、NullPointerException,应该提前做好边界检查、空指针判断。
- 需捕捉异常(Caution Exception) --- 如DubboTimeoutException,客户端必须显式处理,可以重试或者降级处理等等。
- 可透出异常(Ignored Exception)--- 框架或系统产生的,且会自行处理,而程序无须关心。
![22ec593890793a4cb90943d06b6dd0dc.png](https://img-blog.csdnimg.cn/img_convert/22ec593890793a4cb90943d06b6dd0dc.png)
![230cada2fcf5c39d77fbee37df3eae50.png](https://img-blog.csdnimg.cn/img_convert/230cada2fcf5c39d77fbee37df3eae50.png)
异常抛出设计:
- 对外提供的开发接口,建议使用错误码;
- 公司内部跨应用远程服务调用,优先考虑使用Result 对象来封装错误码、错误描述信息;
- 应用内部,则推荐直接抛出异常对象;
防止NPE(NullPointerException),一定是调用方的责任,需要调用方进行事先判断。
两个关键字 throw 和throws 的区别
throw new Exception(...);
- throw -- 在方法内部抛出具体异常类对象的关键字;
- throws -- 用在方法signature 上,表示方法调用者可以此方法声明向上抛出异常对象。