受控异常 VS 非受控异常

 

在Java中,一般异常有两种实现模型,一种是(Checked Exception)受控异常;另一种是(Runtime Exception)非受控异常。受控异常,是指那些需要在客户显式捕获、处理或抛出的异常,它们继承自java.lang.Exception;运行时异常,是指不需要客户显式捕获、处理或抛出的异常,它们继承自Java.lang.RuntimeException。

  使用运行时异常可以有效避免“污染”用户,如果采用受控异常,在处理一些接口时就会抛出底层的远程通信异常,它会强迫客户捕获并处理,如果客户不处理继续往上层的调用端抛出,如所有的异常都往上抛,那么Web层的WebController就要去处理这些异常,达到了污染的目的。

  在.NET中,我们也遇到过异常,那时我们都是采用受控异常,在调试期间就不得不把所有的异常去除掉,造成了很大的复杂性,如果使用运行时异常,则可以大大减少这些错误。在程序中,我们应尽可能的采用运行时异常,而少用受控异常。



受控异常:Checked Exception,这类异常必须写try{}catch{},或者throw抛出,否则编译通不过。

非受控异常:Unchecked Exception,这类异常也叫做运行时异常(与非受控异常 字数相等),这类异常不需要try{}catch{},也不需要throw抛出,编译能通过。为什么要使用非受控异常?为了简化代码。试想一下,如果所有可能出现异常的地方(比如访问数组元素可能会越界、调用对象方法,对象可能为null),我们都写try{}catch{},或者throw 抛出,那么代码肯定冗余的不成样子了。也就是说,采用非受控异常(运行时异常)可以减少代码的污染。

对于非受控异常(运行时异常),因为不需要额外处理,也能编译通过,我们可以进行预先检查,比如访问数组元素时,我们预先检查是否越界,调用对象方法时,预先检查对象是否为null

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值