创建单例对象,构造函数时涉及引用属性的操作

本文探讨了Java中的强引用与弱引用的区别及其应用场景,指出强引用可能导致内存泄漏和空指针问题,提倡使用弱引用解决。同时介绍了构造函数的类型、私有化构造以及单例模式的创建方法,特别是使用伴生对象创建私有构造的单例实例。
摘要由CSDN通过智能技术生成

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{  }伴生对象,在其中写一个创建单例的方法,通过这个类名,直接调用这个伴生方法即可产生 单例对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值