第四章数据类型与类型检验
静态和动态检查
Java中的static checking 静态检查 (在编译阶段发现错误)
- 检查语法错误
- 类名/函数名错误
- 参数数目错误
- 参数类型错误
- 返回值类型错误
- 类型检查
Java中的Dynamic checking动态检查
- 非法的参数值
- 非法的返回值
- 越界
- 空指针
静态检查和动态检查的对比:静态检查注重类型检查,动态检查注重值的检查
Mutability and Immutability
两者当只有一个引用指向该值, 没有区别但有多个引用的时候,就存在差异。
final的使用:(如果编译器无法确定final变量不会改变,就提示错误,这也是静态类型检查的一部分)
- 使用final修饰的变量无法修改它的值/引用
- 使用final修饰的类无法被继承
- 使用final修饰的方法无法被重写
使用不可变类型并不是没有缺点的:对其频繁修改会产生大量的临时拷贝(需要垃圾回收)
使用可变类型也有优点:可以获得更好的性能,适合在多个模块之间共享数据
防御式拷贝:(主要是针对拷贝数据类型)
在接收可变类型参数的时候,使用时通过new新建一个可变类型并赋值再使用。
在返回可变类型的时候,不直接返回,而是新建可变类型并赋值在返回。
Snapshot diagram as a code-level, run-time, and moment view
snapshot的使用方法如下
- 对于基本类型使用incoming arrows指向
- 对于对象类型使用circle圈,并使用incoming arrows指向这个圈
- 如果是不可变对象,使用双线椭圆圈
- 不可变的引用(final修饰的)使用双线箭头
浙公网安备 33010602011771号