探究java中的异常

之前对java中的异常如何使用一直存在疑问。
问题:自己写的代码什么时候抛出异常,当偏离程序主流逻辑的时候应该如何返回?

这篇文章就是对这类问题下一个定论。

先来看官方对Exception的总结:

异常的三个优点

概括一下:

  1. Advantage 1: Separating Error-Handling Code from "Regular" Code

    分离regular代码和错误处理代码,这里的regular代码不知道怎么翻译,不过可以理解成我们期望发生的的代码的主要逻辑。

  2. Advantage 2: Propagating Errors Up the Call Stack

    把异常传播到调用栈栈顶

  3. Advantage 3: Grouping and Differentiating Error Types

    分组和细分错误类型

所以确定以下几个原则:

  1. 破坏调用方和被调用方的协议,那么抛出运行时异常;在公司编码规范里,public方法要对自己的入参负责,即需要进行null判断;
  2. 如果调用方已经遵守了协议,在被调用方内部发生了一些异常,或者一些不是主程序逻辑的事情,那么就要考虑几点:①该异常内部是否能够处理②该异常要以什么样的形式通知调用方
  3. 编写被调用方的代码时,要考虑到方法内部是否会发生一些异常的逻辑,对于这些可能发生的非主逻辑且自身无法处理是, 要在方法签名处就声明,让调用方注意到这些异常情况;

总而言之:

  1. 破坏协议,抛出运行时异常;
  2. 方法内部异常,能处理,则处理;不能处理,抛出非运行时异常;