本部分重点考察大题
有以下考点
第四讲 基本数据类型、对象数据类型。 静态/动态类型检查
java是静态类型语言
• 静态 类型语言:在编译阶段进行类型检查,所有变量的类型在编译期就已经确定 • 动态类型语言:在运行阶段进行类型检查,变量的类型在运行期才能确定 • 静态类型检查:可发现语法错误、类名 / 函数名错误、参数数目错误、参数类型错误、返回值类型错误静态类型检查可在编译阶段发现错误,避免了将错误带入到运行阶段,可提高程序正确性 / 健壮性 • 动态 类型检查:可发现非法的参数值、非法的返回值、越界、空指针
静态类型检查是关于“类型”的检查,不考虑值;动态检查是关于“值”的检查。
Java 是一种静态类型语言,它同时具有静态类型检查和动态类型检查。
静态检查 >> 动态动态 >> 无检查
Mutable/Immutable不变数据类型(immutable type):一旦被创建,其值不能改变
引用不变:一旦确定其指向的对象,不能再被改变(但其值是可能变化的)
对于不可变类型,频繁对其运算会产生大量的临时拷贝,可变类型能最少化拷贝以提高效率。因此,使用可变数据类型,可获得更好的性能,也适合于在多个模块之间共享数据。
而不可变类型更“安全”, 在其他质量指标上表现更好。例如,向任何方法传入不可变类型的值,不用担心其值被意外修改;多线程可以安全地持有同一个不可变类型的引用,而不用担心竞争。
值的改变、引用的改变、final改变一个变量:将该变量指向另一个值的存储空间
改变一个变量的值:将该变量当前指向的值的存储空间中写入一个新的值
Java 中的 final 关键字
• final 类无法派生子类 • final 方法无法被子类重写•final 变量无法改变其引用(而非值)
防御式拷贝通过防御式拷贝,给客户端返回一个全新的Date对象
大部分时候该拷贝不会被客户端修改, 可能造成大量的内存浪费
如果使用不可变类型, 则节省了频繁复制的代价
不可变类型 不需要防御式拷贝
//保护可变类型的另一种方法
• 单引用局部变量:把对 mutable 对象的引用限制在类 / 方法内,不对外暴露如果存在多个引用,使用可变类型就非常不安全 Snapshot diagram
不可变对象:用双线 椭圆
//
迭代器是一个可变数据类型,它拥有两个方法:mutator 方法 next() 返回容器的下一个数据;observer 方法 hasNext() 返回容器是否还有下一个数据。
a code-level, run-time, and moment view
//
第五讲 Specification、前置/后置条件 行为等价性
规约的强度
ADT操作的四种类型
表示独立性、表示泄露
不变量、表示不变量RI
表示空间、抽象空间、AF
以注释的形式撰写AF、RI
接口、抽象类、具体类
继承、override
多态、overload
泛型
等价性equals()和==
equals()的自反、传递、对称
hashCode()
不可变对象的引用等价性、对象等价性
可变对象的观察等价性、行为等价性



