最近查了许多关于异常的资料,Java 异常分为Checked Exception 和 UnChecked Exception。对于现有的编程语言来说,Java是唯一提供Checked Exception机制的流行语言。
我在工程的开发中,对异常的定义常存在粒度上的考虑,如果粒度较细,定义到具体类型的异常,总觉力不从心。所以常常采用粗粒度开发,即以包为粒度,一个包定义一个异常(Checked Exception )。
在方法相互调用时,在各个包相互关联的时候,常常只是把这个异常作为新异常的cause抛出。在很少的时候才进行相应的处理(比如内存溢出,做一些相应的抛弃工作),最多的时候只是记录日志继续抛出。
在查阅Checked Exception的作用时,大多书籍都是如下意思:捕获到错误,是为了进行处理,如果处理不了或者不处理就继续往上层传,直到一个地方来处理这个异常。在我所做的工作中,确实有需要处理的地方,但是直接到最外层显示给用户的更多。
在大量的资料中,有如下归纳:假如调用无法对抛出的意外做任何处理,就抛出UnChecked Exception;如果能对抛出的异常进行处理,则用Checked Exception。