软件构造课程思考5

发布时间 2023-05-22 10:37:48作者: Zzzzzzxz

健壮性和正确性

可靠性=正确性+健壮性

健壮性:面向用户

正确性:面向开发者

private方法只能保证正确性,但面向用户的还需保证健壮性

错误和异常

Error:不是由程序本身引起,由系统限制引起

Exception:自己程序导致的问题,可以捕获,处理

下面绿色的部分表示是由用户输入等引起的,是可预测的,在程序运行时处理

不需要实例化Error,也不需要捕获(捕获了也处理不了)

异常分为:运行时异常(RuntimeException)和其他异常

运行时异常是程序员代码里处理不当造成,其他异常由外部原因造成

Checked and unchecked exceptions

Unchecked exceptions = Error + RuntimeExceptions

两者区分:编译器是否能检查出(编译器不会检查Unchecked exception)

checked exception 必须捕获并指定错误处理器handler,否则编译无法通过

五个处理异常时使用的关键字:try,catch,finally,throws,throw

Unchecked异常也能用try/catch来进行捕获,但大多数时时不需要的,也不应该这样做——掩耳盗铃,对发现的编程错误充耳不闻!

尽量用unchecked exception来处理编程错误——使代码更易读

错误可预料,不可预防,但有手段从中恢复,用checked exception

规约中需要包含所有该方法抛出的checked exception

异常的抛出需要满足LSP原则(协变):子类不能比父类抛出更多、更宽泛的异常

可自定义异常类

异常发生后如果找不到处理器,就终止程序,在控制台打印出 stack trace

异常只有两种处理方法:向上抛 / 捕获

如果父类型的方法没有抛出异常,那么子类型中的方法必须捕获所有的checked exception

try- catch -finally:无论是否出现异常,finally块中包含的语句都会被执行(一般为对资源的释放、管理等)

多个catch块不是依次顺序执行的,而是并发的,哪一个最匹配就执行哪一个

finally会在执行完try/catch块之后再执行