T31-10.30异常处理与日志

901 阅读1分钟

异常处理设计与实践

try-catch-finally

try-with-resource

Optional-NPE

级联调用易产生NPE

image.png 这就需要我们进行多次判空,如何优雅得解决NPE呢?

使用Optional优雅防止NPE

image.png

  • 案例 image.png

foreach遍历集合异常

在foreach中去add或remove操作集合会出现异常 image.png 并发修改异常

  • foreach语法糖背后用了iterator image.png
  • iterator ArrayList的iterator实现如下 image.png itr.hasNext 和 itr.next 实现

image.png image.png

next方法第一步 checkForComodification(),它做了什么? 如果modCount != expectedModCount就抛出异常ConcurrentModificationException。modCount是什么?外部类ArrayList的元素数量变更次数;expectedModCount是什么?初始化内部类Itr的时候外部类的元素数量变更次数。

所以,如果在foreach中做了add或者remove操作会导致程序异常ConcurrentModificationException

日志

日志的功能

image.png

日志时效规约

image.png

日志记录规约

  • 系统应依赖使用日志框架(SLF4J、JCL)的 API而不是具体日志库中 image.png
  • 在日志输出时,字符串变量之间的拼接使用占位符的方式
  • 日志打印时禁止直接用 JSON 工具将对象转换成 String image.png

image.png

错误码规约