之前对java中的异常如何使用一直存在疑问。
问题:自己写的代码什么时候抛出异常,当偏离程序主流逻辑的时候应该如何返回?
这篇文章就是对这类问题下一个定论。
先来看官方对Exception的总结:
概括一下:
Advantage 1: Separating Error-Handling Code from "Regular" Code分离
regular代码和错误处理代码,这里的regular代码不知道怎么翻译,不过可以理解成我们期望发生的的代码的主要逻辑。Advantage 2: Propagating Errors Up the Call Stack把异常传播到调用栈栈顶。
Advantage 3: Grouping and Differentiating Error Types分组和细分错误类型。
所以确定以下几个原则:
- 破坏调用方和被调用方的协议,那么抛出运行时异常;在公司编码规范里,
public方法要对自己的入参负责,即需要进行null判断; - 如果调用方已经遵守了协议,在被调用方内部发生了一些异常,或者一些不是主程序逻辑的事情,那么就要考虑几点:①该异常内部是否能够处理②该异常要以什么样的形式通知调用方
- 编写被调用方的代码时,要考虑到方法内部是否会发生一些异常的逻辑,对于这些可能发生的非主逻辑且自身无法处理是, 要在方法签名处就声明,让调用方注意到这些异常情况;
总而言之:
- 破坏协议,抛出运行时异常;
- 方法内部异常,能处理,则处理;不能处理,抛出非运行时异常;