HIT软件构造期末复习第三章ADT+OOP 3.1
3.1要考的概念很多
数据类型是一个集合,每个集合包含的是所有满足这个类型的值
基本数据类型(java):
(在栈中分配内存存储,数据不可变)
int
long
boolean
double
char
对象数据类型(java):
(在堆中分配内存存储,数据有的可变有的不可变)
构建的类:具有层次性(继承关系)
- extends 对接口进行继承
静态类型检查:
在编译阶段进行检查发现错误,对“类型”的检查(语法、类名/函数名、参数数目、参数类型、返回值类型),避免将错误带入运行阶段,提高程序正确性/健壮性
- JAVA是静态检查语言
动态类型检查:
程序运行阶段进行检查发现错误,对“值”的检查(非法的参数值、非法的返回值、越界、空指针)
动态类型检查>>静态类型检查>>无检查
★Mutable/Immutable:
改变变量:将该变量指向另一个值的存储空间
改变变量的值:将该变量当前指向的值的存储空间中写入一个新的值
不变数据类型(Immutable):
创建后值不可改变,不包含任何改变属性的方法
- 属性不能设置为public类型
- 属性不能return出去
- 字符串string是不可变的
- 不可变类型更安全
- LocalDateTime类型不可变
尽量使用**final变量**作为方法的输入参数、局部变量
- final类无法派生子类
- final变量无法改变值/引用(变量的指向)
- final方法不能被子类重写
- final限定的是引用不可改变
可变数据类型(mutable):
创建对象的值可以被改变
- StringBuilder类型是可变的
- 一个变量的改变会引起
其他变量的改变 - 可以最少化拷贝以提高效率(最大的好处)
- 不推荐使用mutable类型对象
- Date类型是可变的
防御式拷贝:
多个引用指向一个对象
使一个引用指向一个对象,但会造成大量内存浪费
★Snapshot diagram:
得会画图
- build-time/run-time
- moment/period
- code
描述程序运行时的内部状态
- 便于程序员交流
- 便于刻画各类变量随时间变化
- 便于解释设计思路
画图
基本类型的值:
变量名+箭头+具体的值
对象类型的值:
用圆圈表示堆,(图三)对象的属性和对象一起放在堆里
示例:
immutable类型:
上图中不可变对象:用双线椭圆
mutable类型:
上图单线圈
不可变的引用:双线箭头
(id是mutable+final类型,指向区域不能改变,限定指向但不限定值,id如果是immutable+final类型,指向和值都不能改变)
引用不可变,但指向的值可变
可变的引用,可指向不可变的值