章节中遇到的问题(二)
前言
(1)check /uncheck exception
(2)行为等价性与观察等价性
(3)频繁出现的名词:黑盒/白盒
一、checked /unchecked exception
首先需要明确的一点:这里的动作主体为编译器,客体是要实现的代码。
这意味着checked exception是需要经过编译器的静态检查的
要能让其通过check它必须被显式捕获或传递
主要是通过以下两种方式:
(先列举一个错误即不能通过编译的情况)
public static void main (string args[]){
...
throw new xxxException();//checked类型
...
}
(1)(外)方法声明时就捕获异常:
public static void main (string args[])throws xxxException{
...
throw new xxxException();//checked类型
...
}
(2)(内)方法内部try-catch-final捕获异常:
public static void main (string args[]){
try{
throw new xxxException();//checked类型
...}catch(xxxException e){
e.printStacktrace();}
finally{
...
}
其次是不能够用上述的方法捕获unchecked exception
首先是对其捕获后可能并不能够做出有用的更改;其次可能这是在主动掩盖代码内部实现的bug,这是不被提倡的;
二、行为等价性与观察等价性
1.行为等价性
这里一般满足情况即为引用的等价(比如基本数据类型的等价);
在对象的等价性中,特别是在可变的对象中才会提及行为等价性,因为正常情况不可变对象中不会存在更改其内部表示的方法;
而对于可变的对象,为了防止调用等价时bug的出现,则默认为引用的相同即可
2.观察等价性
这是针对于不可变对象的等价性做出的要求
一般涉及内部属性的相等
三.频繁出现的名词:黑盒/白盒
(1)测试
-
黑盒测试:常见应用既是对程序的Junit测试,只关注实现的输入输出的正确性;
-
白盒测试:关注具体的代码,比如具体的语句是否被执行,并且测试执行结果的准确性;
(2)框架 -
黑盒框架:并不知道ADT内部的具体实现,对其应用表现为:delegation
-
白盒框架:对内部代码实现有具体的了解,在其基础上进行增加,应用表现为:inherition