java 异常选择: Checked Exception VS Unchecked Exception

Checked Exception

设计的初衷是为了从异常情况恢复,Checked Exception 假使我们捕获了异常,然后需要恢复程序

Unchecked Exception

运行时异常,类似 NullPointerExceptionArrayIndexOutOfBoundsException ,通常是编码可以避免的逻辑错误,不可恢复

Checked Exception VS Unchecked Exception

支持 Checked Exception
  1. 编译器强制检查,Checked Exception 必须被捕获或者传播,这样就不会忘记处理异常。
  2. 强制的约束鼓励了严格的编码和精确的思考。
支持 Unchecked Exception
  1. Checked & UnChecked Exception 是等价的。无论抛出什么异常,能恢复的都可以去恢复,不能恢复的都恢复不了。
  2. 大多数异常不能被修复。我们看不到异常代码的实现,不对它负责,也无法修复它。
  3. 沿调用栈向上传播的 Checked Exception 破坏了顶层的方法,因为这些方法必须声明所有它们调用的方法抛出的异常。
  4. 强制处理或传播 Checked Exception 导致异常被草率处理。
  5. 不兼容 lambada 表达式

个人经验

  1. 推荐:抛出 Unchecked Exception, 并在 java doc 上说明。

     		/**
         * @throws CustomUncheckedException 这是一个 unchecked excpetion
         */
        public void test(){
            throw new CustomUncheckedException();
        }
    
  2. 不怎么推荐:抛出 Unchecked Exception, 在方法签名上声明,也不需要 try catch

    		/**
         * @throws CustomUncheckedException 这是一个 unchecked excpetion
         */
        public void test() throws CustomUncheckedException{
            throw new CustomUncheckedException();
        }
    
  3. 不推荐:抛出 Checked Exception,需要 try catch

      	/**
         * @throws CustomCheckedException 这是一个 checked excpetion
         */
        public void test() throws CustomCheckedException {
            throw new CustomCheckedException();
        } 
    

总结

优先使用 Unchecked Exceptin , 尽量避免 Checked Exception 。目前一些 Java 框架 SpringHibernate 等都只使用 Unchecked Excepiton。在 spring 中有一个比较好的的做法是,有一个全局异常处理器,可以对异常统一进行处理。

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值