1.弱引用与强引用
1.1什么是强引用?
强引用是最常见的引用类型,如果一个对象Student被一个强引用变量student所引用,那么只要该变量还存在,系统就不会(CG)回收这个对象。
val student = Student(); // 强引用,
1.2 强引用弊端
我们常用,但容易空指针,内存泄漏!!!
原因: 比如我们创建了单例对象,引用了MainActivity;但一旦MainActivity销毁,单例对象仍然指向原MainActivity,但此时已没有了,会出现空指针异常,不知道引用什么,项目crash掉
补充一下:Application和Activity的生命周期实际上是项目最长的。
1.3解决措施——弱引用
1.3.1 什么是弱引用
引用非必须的对象 -》 可能只是在主构造函数中声明弱引用
没有被 强引用变量或软引用变量 来引用, 应用对象会被回收
获取弱引用的对象,采用 get方法
1.3.2 选用弱引用原因
—— 注意单例化对象的构造函数(private constructor)中,
引用属性一定要弱引用,避开空指针的问题
1.3.3 补充另两种引用-(了解即可)
软引用(Soft Reference)
特点:当 JVM 内存不足时,会由现引用关系回收这些对象。
虚引用(Phantom Reference)
特点: 被垃圾收集器回收时才会被使用,无法通过这个引用获得该对象的实例。
2.构造函数介绍
2.1 无参构造,我们常用
默认无参数,实例化此对象时,不用给任何属性赋值
2.2主构造
实例化对象时需要传参(看它的子类或本身方法里需要点什么),这时的constructor可以省略
私有化构造: private constructor 让外部不能直接创建这个实例化对象
次构造 : 放在 类的内部,与主构造功能相同
init初始化方法
注意: 类的执行顺序 主构造 > init > 次构造
3.创建单例对象
3.1哪些要创建单例?
像是各个Manager,Presenter这个系统就只能存在一个的
3.2 创建方法
口诀: 判断创建没-》上锁 -》再判断-》可以创建啦-》记得return 回去整体
3.3 如何生成私有化构造的单例对象
使用company object{ }伴生对象,在其中写一个创建单例的方法,通过这个类名,直接调用这个伴生方法即可产生 单例对象