软件构造课程回顾-第6章:Robustness(2)

  第6章的第二部分主要是对checked和unchecked类型的异常进一步分析。
     二者之间的主要区别如下图。

在这里插入图片描述

首先,有一部分的异常会被处理(handle),而执行这一步骤的就是编译器,还有程序员。

当一个异常产生时,可以有两种方式来处理。第一种就是我们的程序本身能使用try-catch块来捕获并解决异常;而第二种情况,即程序无法独立解决时,我们就要将其抛出,表明我们无法处理,请求调用方来处理这个异常。每一个异常都能且只能对应这两种处理方式。如果我们既无法捕获,处理异常,又不将其抛出以告知调用者,就会产生错误。编译器可以帮我们检查程序是否抛出或者处理了可能的异常。

当我们决定是采用checked还是unchecked异常的时候,有一个判据很重要,即:如果该异常真的被抛出了,客户(client)会做出怎样的补救呢?这里又分成了两种情况。如果client有办法恢复这个异常,就可以用checked;反之,就设为unchecked。

对于一个异常,如果是unchecked,就挂起程序并返回异常信息,简单地告诉其他人“有错!”即可。而由于这些异常是client也无法掌控的,不必告知他人错误在哪里;若是checked类型的,则要创建一个单独的子类来应对这种异常,并且要尽量让client从这个异常中获取尽量多的有价值的内容—案发现场具体是什么样子(这也是Exception应该做到的本职工作)。

总之,checked异常指的是那些可预料但不可预防的异常(也就是说,我知道这些地方保证会有错误产生,但我也不知道具体是什么错误);而unchecked异常指的就是那些能够预防的异常,当然这是建立在每个程序员在release自己的代码时做出的“自己的代码是无误的”的假设上的。毕竟,一个摆明了自己有缺陷而又不愿意在release之前改正过来的代码,纯属是在掩耳盗铃,很难被人接受。

对于之前已经提到过的异常处理时涉及的5个关键词,将在下一个部分中具体分析。个人水平有限,不足之处还望见谅!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值