第三章 ADT与OOP
3.1 数据类型与数据检查
3.1.1java的数据类型
java有基本数据类型(primitive types)和对象数据类型(object types),以小写开头的是基本的,大写开头的是对象的
二者的对比如下:
-
对于Object数据类型有如下特点:
-
- Object类是所有类的基类,也就是所有类默认都继承了Object类
- 子类是父类的一个实例,如 Student 和 Teacher 都可以设计为Person的子类
基本数据类型的包装类:
-
- 将基本数据类型封装为对象
如 Boolean, Integer, Short, Long, Character, Float, Double - 一般使用在容器里,除此之外尽量少用
- 语言会自动进行转换
- 将基本数据类型封装为对象
这里介绍一下重载的概念:相同的操作名称用于不同的数据类型,对于基本的运算符(±*/)Java已经进行过深度的地重载了。而对于其它的方法就相对低一些
3.1.2 动态与静态数据类型
首先Java是一个静态语言(运行时结构不可变的语言就是静态语言)在编译时需要知道所有变量的类型,编译器可以推断所有表达式的
类型
3.1.3可变与不可变
-
immutable
-
不变性是一种主要的设计原则
- 不变数据类型创建完后,值不可修改
- 不变引用,一旦指定引用位置,不可再次指
- Final关键字对不可变引用提供了静态检查的支持
对于immutable的数据类型有:
- A final class declaration means it cannot be inherited(不可继承继承)
- A final variable means it always contains the same value/reference but cannot be changed(不可变更)
- A final method means it cannot be overridden by subclasses(不可重载)
这里特别说明一下,String是一个immutable的数据类型,而StringBuilder是一个mutable的数据类型
对于二者区别有如下例子:
对于可变数据类型的优势有:
- 开销更小
- 易于共享
其对应的缺陷有: - 不安全
- 相对难以理解
- 后续修改困难