Java异常
- check异常
- IO 异常
- SQL异常
- 运行时异常
- JVM处理
- NPE
- ClassCastException
- ArrayIndexOutOfBoundsException
注意事务和异常的配合及联动
Bad Case
public void updateConfig(long configId) {
Config config = null;
try {
config = configMapper.findById(config);
} catch (Exception e) {
//1
logger.error("[findById error][{}]", e.getMessage());
}
//2
if (config != null){
//biz
}
}
存在的问题
- 1处丢掉了异常. 就算异常打印了堆栈,如果没有用户来说明出问题了(或者是有平台告警),也不会有人去看的。尽管这里看着很严谨,其实作用并不大。
- 异常判断+2处的空处理,完美避开了正确答案。本来需要更新配置,结果什么也没做
尽量做到
- 绝大部分场景,除非特殊情况不允许捕获异常。
- 少加空判断,如果写了空判断,就要测试为空和不为空2种场景。
必须要进行的空判断有
- 用户的输入
可以避免的空判断
- 查询数据库的信息
- RPC服务提供的信息