第三章第一节 数据类型与类型检查
1.数据类型
-基本数据类型
-对象数据类型
Boxed primitives
– Boolean, Integer, Short, Long, Character, Float, Double
一般可以自动转换
2.类型检查
-静态类型检查:关于"值"的检查
Syntax errors 语法错误
Wrong names 类名/函数名错误
Wrong number of arguments 参数数目错误
Wrong argument types 参数类型错误
Wrong return types 返回值类型错误,
-动态类型检查:关于"类型"的检查
Illegal argument values 非法的参数值
Unrepresentable return values 非法的返回值
Out-of-range indexes 越界
Calling a method on a null object reference.
3.可变性与不可变性
改变一个变量:将该变量指向另一个值的存储空间
改变一个变量的值:将该变量当前指向的值的存储空间中写入一个新的值。
final类无法派生子类
final变量无法改变值/引用
final方法无法被子类重写
不变对象:一旦被创建,始终指向同一个值/引用
可变对象:拥有方法可以修改自己的值/引用
-可变数据类型最小化的拷贝以提高效率;使用 不可变类型,对其频繁修改会产生大量的临时拷贝 (需要垃圾回收 )
-可变数据类型,可获得更好的效能;
-可变数据类型也适合在多个模块之间共享数据;
-不可变数据类型更安全,更易于理解,也更方便改变
-防御性拷贝
如果一个方法或构造函数允许可变对象进/出,那么就要考虑一下使用者是否有可能改变它。如果是的话,那你必须对该对象进行保护性拷贝,使进入方法内部的对象是外部时的拷贝而不它本身(因为外部的对象有可能还会被改变)。
4.快照图(Snapshot diagram)
基本类型的值:原始值由裸露的常量表示。传入箭头引用变量或对象字段的值。
对象类型的值:一个对象值是一个由它的类型标记的圆。当我们想要显示更多的细节时,我们在它里面写字段名称,箭头指向他们的值。
不可变对象:用双线椭圆。
不可变的引用:用双线箭头
注意:
引用时不可变的,但指向的值可以是可变的
可变的引用,也可指向不可变的值