Java异常

  • check异常
    • IO 异常
    • SQL异常
  • 运行时异常
    • JVM处理
    • NPE
    • ClassCastException
    • ArrayIndexOutOfBoundsException

注意事务和异常的配合及联动

Bad Case

  1. public void updateConfig(long configId) {
  2. Config config = null;
  3. try {
  4. config = configMapper.findById(config);
  5. } catch (Exception e) {
  6. //1
  7. logger.error("[findById error][{}]", e.getMessage());
  8. }
  9. //2
  10. if (config != null){
  11. //biz
  12. }
  13. }

存在的问题

  • 1处丢掉了异常. 就算异常打印了堆栈,如果没有用户来说明出问题了(或者是有平台告警),也不会有人去看的。尽管这里看着很严谨,其实作用并不大。
  • 异常判断+2处的空处理,完美避开了正确答案。本来需要更新配置,结果什么也没做

尽量做到

  • 绝大部分场景,除非特殊情况不允许捕获异常。
  • 少加空判断,如果写了空判断,就要测试为空和不为空2种场景。

必须要进行的空判断有

  • 用户的输入

可以避免的空判断

  • 查询数据库的信息
  • RPC服务提供的信息