【软件构造】课件精译(十六) 健壮性构造目标、异常与错误处理

本章之前还介绍了“健壮性与正确性”,理论性比较强而且在最初几章有所提及,这里不再介绍。

一、一般性错误与异常

错误的类型
输入错误、设备错误、物理限制、代码错误
错误处理
错误处理是指编程、应用程序和通信中错误的预测、检测和解决。
预先防止、错误中恢复、优雅地退出
难点在于检测错误的代码通常远离可以回滚数据或保存数据并优雅退出的代码
错误处理的任务就是将控制权从发生错误的位置转移到可以处理错误的程序

(1)返回一个中性值

采用通用值或缺省值,如0、空字符串、空指针等。 对安全或生命相关的程序,则需要严格保证正确性。

(2)用下一个有效值替代
(3)返回和之前一样的结果
(4)替代为最接近的合法值
(5)在文件中记录一个警告信息
(6)返回一个错误代码

设置状态值并返回状态值

(7)调用一个错误处理例程/对象

一旦应用程序运行时发生缓冲区溢出,使用此方法就不再安全。

(8)显示错误信息
(9)本地处理错误

以任何最佳本地方式处理错误(正确性)

(10)终止

错误处理的高层启示
整个程序应该采用一致的处理机制
错误处理机制同程序的正确性、健壮性和其他非功能指标密切相关
错误处理机制的决策是体系结构级别或者高层的设计决策问题
确定错误处理机制后,要严格执行
防御性编程的重点在于防范不期望的错误

二、Java中的错误和异常处理

Java中的“异常”
在这里插入图片描述
Error类描述Java虚拟机内部错误(资源耗尽和系统错误等),多数情况下无需处理,也无法处理
Exception类描述程序导致的错误,需要处理

(1)什么是异常

异常
异常处理机制将允许代码将错误或者异常事件传递给调用它的代码。
当方法不能正常完成时,提供了另外一个退出路径。
方法抛出异常,停止执行,不返回任何值,不执行后续代码。
异常处理机制捕获异常,寻找到可以处理此异常的代码进行处理。
异常处理的好处
不能忘记处理常见的故障模式

  • 比较:使用标志或特殊返回值
    提供错误的高级摘要和堆栈跟踪
  • 比较:C中的核心转储

改进代码结构

  • 将常规代码路径与异常分开
  • 简化从故障中恢复的任务

轻松编写强大,可维护的代码
在这里插入图片描述
在这里插入图片描述
业务逻辑代码与错误处理代码分离

(2)异常的分类

Exceptions从Throwable中继承
在这里插入图片描述
RuntimeException和其他异常
RuntimeException通常是因为编程错误,而其他异常通常由于I/O错误等类型错误。
继承了RuntimeException的异常包括类型转换、访问越界、空指针等,而不继承的通过有尝试读文件等
RuntimeException
RuntimeException通常是编程者的错误,例如空指针,如果经过检查则可避免,而文件读取则不一定,其存在具有不确定性

(3)checked和unchecked异常

在这里插入图片描述
Unchecked exception:编程错误,其他不可恢复错误(Error + RuntimeException),不要求必须捕获处理
Checked exception: 要求必须捕获处理,compiler会进行检查
在这里插入图片描述
常见的Unchecked异常
ArrayIndexOutOfBoundsException:数组索引越界
NullPointerException:空指针错误
NumberFormatException:数字解析错误
ClassCastException:强转错误
IllegalArgumentException
IllegalStateException
NoClassDefFoundError
Checked异常的处理操作
throws 声明“本方法可能会发生XX异常”
throw 抛出XX异常
try, catch, finally 捕获并处理XX异常
Unchecked异常也可以使用throws声明或try/catch进行捕获,但大多数时候是不需要的,也不应该这么做——掩耳盗铃,对发现的编程错误充耳不闻
如果客户端可以通过其他的方法恢复异常,那么采用checked exception
如果客户端对出现的这种异常无能为力,那么采用unchecked exception
错误可预料,但无法预防,但可以有手段从中恢复,此时使用checked exception
Checked和Unchecked异常
在这里插入图片描述

//未完待续

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值