开课吧孤尽T31训练营学习笔记-DAY5-异常处理

168 阅读2分钟

前言-异常和日志

今天上课的内容很庞大包括异常和日志两个部分,内容相当庞大。

在实际的项目中,异常处理和日志往往又做的不好,日志打印比较随意,打印信息不全,异常也不会好好处理;这个部分处理好,是高手的表现之一,我觉得在很长的工作时间内,也没有能够掌握这块的方法论,我希望能在这个部分,更加深入的探讨学习,提升系统错误处理的能力。

所以分享,我分成两个部分,第一篇专注于异常,第二篇专注于日志。

异常处理

一、Java异常基本知识

1.1 java异常体系

理解一下老师给的一张图:

image.png

运行时异常

  1. 可预测的运行时异常:比如NPE,ArrayIndexOfBoundsException都是可以通过检查来避免的。
  2. 需捕获异常:这个没想通
  3. 可透出异常:运行时异常的

checked异常

这个只是个概念,不想runtimeException,有一个父类。

  1. 引起注意型: 比如字符串到日期转码异常,需要引起注意,但是
  2. 坦然处置型: 比如IO异常,可以采用重试机制

Error不可抗力

我们完全无能为力,比如栈溢出错误,基本上碰到虚拟机就挂了。

下面给了一个更加具体的异常体系图。 image.png

1.2 java异常try...catch...finally流程解析

需要进一步整理一下,我再做一下实验,好好理解一下

1.3 异常编程小技巧

使用try with resource

从jdk1.7开始提供的语法,处理IO类。

使用Optional避免NPE

传统避免NPE需要用if判断,代码写起来臃肿,可以使用Optional来避免。 TODO:找一个参考文章,有专门写这个技巧的文章。

foreach遍历集合

二、异常抛出与捕获原则

  1. 非必要不使用异常
  2. 使用描述性消息抛出异常
  3. 力所能及的异常一定要处理
  4. 异常忽略要有理有据
非必要不使用异常:这个是真理
使用描述性消息抛出异常:推荐一下吧,有事异常类名字已经很说明问题了
力所能及的异常一定要处理: 不建议采纳,往往处理不好,还不如不处理,在最外层打印出来,留给高手解bug
异常忽略要有理有据:不知道异常忽略是什么意思

总结

异常处理是门高深的学问,能不碰就不碰吧, 暴露给最外层打印出来。