背景:
异常处理是Java 开发中的一个重要部分。它是关乎每个应用的一个非功能性需求,是为了处理任何错误状况,比如资源不可访问,非法输入,空输入等等。Java提供了几个异常处理特性,以try,catch 和 finally 关键字的形式内建于语言自身之中。Java 编程语言也允许你创建新的异常,并通过使用 throw 和 throws关键字抛出它们。
Java 的异常机制
异常就是一个需要被明确感知的危险信号
好的异常机制
- 异常应当描述导致当前异常发生的原因
- 根据异常栈快速定位到异常发生的位置
- 结合异常描述和异常栈解决异常
坏的异常机制
- 代码可读性差
- 无法根据异常解决问题
Java异常处理流程
Java异常体系
异常处理设计与实践
异常抛出和捕获的原则
- 非必要不使用异常,稳定的代码不应该放入try catch 块
try{}里面的代码越少越好,为什么?
因为jvm在处理异常代码的时候,需要对其进行特殊的处理,这一个时候需要给它分配一些资源来管理这一个异常代码,那么你放置的代码越多,需要的资源就会越多。
- 使用描述性信息抛出异常
- 力所能及的异常一定要处理
- 异常忽略要有理有据
try...catch...finally 流程解析
JDK7 资源关闭之 try with resource流程解析
特殊NPE场景及其处理对策:
使用 Optional 优雅的防止 NPE
异常处理
- 为可恢复的错误使用检查型异常,为编程错误使用非检查型错误
- 在finally程序块中关闭或者释放资源
- 在堆栈跟踪中包含引起异常的原因
- 始终提供关于异常的有意义的完整的信息
- 避免过度使用检查型异常
- 将检查型异常转为运行时异常
- 记住对性能而言,异常代价高昂
- 避免catch块为空
- 使用标准异常
- 记录任何方法抛出的异常
你总是这样轻言放弃的话,无论多久都只会原地踏步。--《哆啦A梦》
参考文献:
Joel老师的ppt