前言-异常和日志
今天上课的内容很庞大包括异常和日志两个部分,内容相当庞大。
在实际的项目中,异常处理和日志往往又做的不好,日志打印比较随意,打印信息不全,异常也不会好好处理;这个部分处理好,是高手的表现之一,我觉得在很长的工作时间内,也没有能够掌握这块的方法论,我希望能在这个部分,更加深入的探讨学习,提升系统错误处理的能力。
所以分享,我分成两个部分,第一篇专注于异常,第二篇专注于日志。
异常处理
一、Java异常基本知识
1.1 java异常体系
理解一下老师给的一张图:
运行时异常
- 可预测的运行时异常:比如NPE,ArrayIndexOfBoundsException都是可以通过检查来避免的。
- 需捕获异常:这个没想通
- 可透出异常:运行时异常的
checked异常
这个只是个概念,不想runtimeException,有一个父类。
- 引起注意型: 比如字符串到日期转码异常,需要引起注意,但是
- 坦然处置型: 比如IO异常,可以采用重试机制
Error不可抗力
我们完全无能为力,比如栈溢出错误,基本上碰到虚拟机就挂了。
下面给了一个更加具体的异常体系图。
1.2 java异常try...catch...finally流程解析
需要进一步整理一下,我再做一下实验,好好理解一下
1.3 异常编程小技巧
使用try with resource
从jdk1.7开始提供的语法,处理IO类。
使用Optional避免NPE
传统避免NPE需要用if判断,代码写起来臃肿,可以使用Optional来避免。 TODO:找一个参考文章,有专门写这个技巧的文章。
foreach遍历集合
二、异常抛出与捕获原则
- 非必要不使用异常
- 使用描述性消息抛出异常
- 力所能及的异常一定要处理
- 异常忽略要有理有据
非必要不使用异常:这个是真理
使用描述性消息抛出异常:推荐一下吧,有事异常类名字已经很说明问题了
力所能及的异常一定要处理: 不建议采纳,往往处理不好,还不如不处理,在最外层打印出来,留给高手解bug
异常忽略要有理有据:不知道异常忽略是什么意思
总结
异常处理是门高深的学问,能不碰就不碰吧, 暴露给最外层打印出来。