这是我参与2022首次更文挑战的第15天,活动详情查看:2022首次更文挑战
本篇也是介绍一些日常的杂乱知识,主要以异常的见解为主
异常
初识异常
异常存在一个基类 —— Throwable;它有两个子类,Error和Exception
常规的捕获异常,我们一般都会用 try/catch去实现
try{
...
}catch(Exception e){
...
}
或者是用throw Exception去抛出,抛给上级去处理该异常,逐级上报。正如线程里面的方法调用,在Run方法里面调用其他方法,然后抛出来的异常,最终需要在run方法解决掉。
异常处理
异常从处理上面来说分为受检异常和未受检异常;
- 未受检异常表示我们日常的编程逻辑错误,例如我们的空指针异常,是我们可以通过代码逻辑去避免的;
- 受检异常表示代码的逻辑没有问题,异常抛出在于网络、I/O、数据库等不可预测的因素。
对于项目中自己写的全局捕获异常,是继承RuntimeException还是其子类, 实都不重要;重要的是解决方案,应该适当的时候被抛出并以适当的方式解决。
还是那句老话,技术为业务服务。
抛出错误有时候是为了让开发人员更好地定位、让用户更清晰知道自己的使用不当。所以更重要的是统一错误
异常作为业务处理
异常应该且仅用于异常情况,是指异常不能代替正常的条件判断;举个简单的例子,在循环数组的时候,应该先检查数组的索引下标是否有效,而不是等到数组遍历抛出异常再结束循环;亦或者是订单业务,支付失败应该抛出异常并作相关处理,而不是支付失败后,作后续的业务处理。
不能依赖异常来实现业务,真正出现异常的时候,应该抛出异常,而不是返回特殊值。
总结
异常机制的出现,使得程序代码的正常逻辑和异常逻辑可以相互分离,异常情况可以全局捕获,从而处理异常情况的代码可以大大减少。