健壮性与正确性
- 健壮性:不正确输入仍有正常的表现
- 正确性:完全按照SPEC执行,不一致就直接报错。
衡量健壮性
- MTBF:平均失效间隔时间。
- 而正确性:MTTF,到失败时的时间。
Throwable
- Throwable包括Error以及Exception。
- Exception包括RuntimeException以及NonRuntimeException
RuntimeException
- 此异常是程序员出错了。自己写的源代码问题。
- 非运行时异常,是不可控因素导致的,在代码中验证也难以避免。
- Unchecked异常
CheckedException
- 不可控,外部因素,只能catch throw
异常与SPEC
- 异常也需要在SPEC中定义,是post-condition的一部分。
- 不能抛出error以及unchecked exception
- 子类只能抛出父类更具体的异常,或者根本不跑出。
- 抛出异常后,控制流不会再回来了。
定义异常
catch
- 异常发生后,如果找不到处理器,就直接终止程序,在控制台打印stack trace。
- 在catch中也可以抛出异常,这么做是为了改变异常类型,进而使得client获得更详细的错误信息。
finally
- 处理异常发生后的资源
- 不管是否发生异常,final都要执行。
- 下面这个return false,就和push esp一样无趣
stack trace
- 遇到异常后,JVM沿着栈,逐层压出栈,依次寻找是否有catch,如果都没有,则终端打印错误,控制不会再回去了,类似set jump
assert
- 对于pubic的precondition使用异常处理,post以及public的所有均使用assert