OOpre Lec3-如何管理对象
开个坑,更新OOpre(简称op)的学习内容
原神,启动!
(别问为什么没有前两周的内容,问就是传错仓库没了)
在这里放个佬的文章orz orz Lec1 Lec2 (但他应该不知道我看到了)
Lec3-如何管理对象
对象与引用
-
对象是程序通过new产生的实例,引用是程序中声明的变量
-
对象究竟是什么
- 对象是对内存的一个区域
- 对象包含属性数据和指向类的指针
这部分内容参考c++&c#
-
引用究竟是是什么
-
对象引用指向对象的地址
-
对象引用存在null的可能性,但对象不可能
这句话的含义是,在编程中,你可能会有一个引用(或者说指针)指向一个对象,但是这个引用可能为null。换句话说,这个引用并不指向任何对象。当你尝试使用这个引用访问对象时,如果它是null,你的程序就会产生错误。但是,对象本身不可能为null,因为它始终存在于内存中的某个位置。
例如,在Java语言中,你可以创建一个对象的引用,如:
1
Object obj;
在这个情况下,
obj
是一个引用,但它并没有指向任何对象。也就是说,obj
是null。如果你尝试调用obj
的任何方法或访问其属性,程序就会抛出一个NullPointerException
。为了解决这个问题,你需要确保在使用引用之前,它已经被初始化为一个实际的对象。例如:
1
Object obj = new Object();
在这个情况下,
obj
是一个引用,并且它指向一个实际的Object
对象。现在你可以安全地调用obj
的方法和访问其属性,而不会抛出NullPointerException
。
-
-
Java与C的联系与区别
Java的对象引用相当于c中的指针变量,指向一片内存空间
-
对象与引用
- 区别
- 对象有实际存在的内存区域;引用是一个标识符,指向对象所在地址
- 只能通过对象引用去访问或改变对象的方法或数据
- 联系
- 对象引用与对象息息相关
- 一个对象可能对应多个对象引用
- 区别
常见容器及其作用
- ArrayList
- LinkedList
- HashMap
- HashSet
- Queue
- Deque
- TreeMap
- PriorityQueue
- …
这么多容器,该如何挑选呢?
-
ArrayList && LinkedList
逻辑特征:ArrayList——数组
LinkedList——链表
优点:两者均可以按照顺序关系或按照下标访问对象
缺点:查找某个对象需要遍历,查找速度比较慢
-
HashMap
逻辑特征:基于哈希表的键值映射,可以使用键来快速查找和访问值。没有固定顺序,不允许重复的键
优点:**快速查找(或删除)**某元素,尤其是该元素有唯一的id时
缺点:存储无序,难以按照存储先后大小访问
-
HashSet
逻辑特征:基于哈希表实现的无序集合,不允许存储重复元素。常数时间的插入和查找
优点:保持集合元素的唯一性互异性。便于自动去重
缺点:内部存储无序,与HashMap相同的问题
-
Queue Deque TreeMap PriorityQueue
Queue:队列,LinkedList是其具体实现
Deque:双向队列,java老版本的Stack已经过时,推荐使用Deque
TreeMap:有序映射,红黑树实现,根据键值来排序,可以自定义比较器
1
TreeMap<id, object>
PriorityQueue:优先队列,基于Heap(堆)实现
层次化对象管理方法
针对不同的需求,需要建立不用类型、不同层次的容器加以进行数据的处理
组合关系(Composition):有多个对象组合形成一个更大对象,整体与部分存在
聚合关系(Aggregation):若关联关系,以对象引用作为其成员变量,向印度对象引用可以为null
本质上是属性识别问题