异常处理
异常:程序执行中的非正常事件,程序无法再按预想的流程执行,将错误信息传递给上层调用者,并报告“案发现场”的信息
异常的种类:
1.运行时异常:由程序员在代码里处理不当造成
2.其他异常:由外部原因造成
Check/Uncheck Exceptions
异常处理:必须在方法的spec中明确写清本方法会抛出的所有checked exception, 以便于调用该方法的client加以处理
子类型异常处理规范:(LSP)
1.如果子类型中override了父类型中的函数,那么子类型中方法抛出的异常不能比父类型抛出的异常类型更宽泛
2.子类型方法可以抛出更具体的异常,也可以不抛出任何异常
3.如果父类型的方法未抛出异常,那么子类型的方法也不能抛出异常。
断言Assertions
断言:在开发阶段的代码中嵌入,检验某些“假设”是否成立。若成立,表明程序运行正常,否则表明存在错误。出现AssertionError,意味着内部某些假设被违反了
断言可检测情况:内部不变量、表示不变量、控制流不变量、方法的前置条件、方法的后置条件
断言用于绝不应该发生的情况,而异常处理用于可预料到的非正常情况。
提高健壮性和正确性
1.健壮性安全性编程。(断言,防御性编程,代码审查,形式验证)
2.发现failure的症状(信息转储,栈追踪,执行日志,测试)
3.找出潜在fault(debug,bug定位)
4.修复errors