java单例模式构造器初始化_秒懂java单例模式,java私有构造器与一夫一妻制
在《秒懂java,对于创建一个java对象,你真的会吗?》一文中,讲述了java如何创建一个对象以及如何更优雅的创建对象。此外,java里还有一种比较特殊的创建对象的方式:私有构造器创建对象。
java私有构造器
私有构造器就是一个类的构造方法的访问权限定义为private,它只能被包含它的类自身所访问,而无法在类的外部调用,故而可以阻止对象的生成。这就好比现代社会的一夫一妻制,这个private的私有构造方法就类似这种约束制度,类就是一大老爷们,私有构造方法创建的对象就好比是这个大老爷们明媒正娶的老婆。
在上面的内部类Husband就是一个只有私有构造器的类。我们通常使用私有构造器这种手段来实现单例(Singleton)。Singleton通过将构造方法限定为private避免了类在外部被实例化,在同一个虚拟机范围内,Singleton的唯一实例只能通过getInstance()方法访问。
java反射对私有构造器的访问
本来一夫一妻制度挺好的,但是有时候丈夫经常在外面应酬,看见其他漂亮的女人也难免心动,经不住诱惑,于是就会出轨,就会有情人,就会有小三小四甚至还有了小孩。私有构造器的约束本来也是挺好的,但也不能完全做到一个类只有一个实例,我们可以通过Java反射机制来实现对类的私有构造方法的访问从而创建新的对象:
java私有构造实现单例多线程问题
上面的例子中,类加载的时候就会直接new一个静态对象出来,在不使用同步锁的情况下实现了线程安全,当系统中这样的类较多时,会使得启动速度变慢。由于一个男孩子不可能一出生就立刻找老婆,只有等到他达到法定结婚年龄后才会娶妻生子。到达法定结婚年龄从我们系统的角度叫“适时加载”,就是在第一次使用的时候才初始化该类对象:
上面的代码中,getInstance方法被锁住,如果调用这个方法的线程很多,将导致很多线程阻塞在这里,粒度有点大,我们只需要锁住创建对象的那部分即可,下面是改进的getInstance方法:
总结
java私有构造器是实现单例(Singleton)模式的有效形式,但在使用过程中要考虑多线程问题以及合适的时机创建对象。单例模式就类似于一夫一妻制,适时加载对象就好比要达到婚育年龄才允许结婚。看完这篇《秒懂java,java私有构造器与一夫一妻制》, 你是否get到了呢?
java单例模式构造器初始化_秒懂java单例模式,java私有构造器与一夫一妻制相关推荐
- java编程思想 初始化_《java编程思想》_第五章_初始化与清理
初始化和清理是涉及安全的两个问题,java中采用了构造器,并额外提供了"垃圾回收器",对于不再使用的内存资源,垃圾回收器能自动将其释放. 一.用构造器确保初始化 java中,通过提 ...
- java类成员初始化_简单了解Java类成员初始化顺序
这篇文章主要介绍了简单了解Java类成员初始化顺序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 类中包含7中成员: 1.静态变量 static 2 ...
- java arraylist 初始化_一不小心就让Java开发踩坑的fail-fast是个什么鬼?
什么是fail-fast 首先我们看下维基百科中关于fail-fast的解释: In systems design, a fail-fast system is one which immediate ...
- java 虚拟机 初始化_【深入理解Java虚拟机】类的初始化过程
类的初始化过程 类的加载过程.png 加载 将 Class 文件以二进制的形式加载到内存中 验证 校验 Class 文件是否安全,是否被正确的修改等 准备 为类变量申请内存,设置默认值,(初始化变量的 ...
- 单例模式应用场景_三、单例模式详解
4.单例模式详解 4.1.课程目标 1.掌握单例模式的应用场景. 2.掌握IDEA环境下的多线程调试方式. 3.掌握保证线程安全的单例模式策略. 4.掌握反射暴力攻击单例解决方案及原理分析. 5.序列 ...
- java 基础 笔试题_非常全面的java基础笔试题
1.下列说法正确的是() (程序结构) A java程序的main方法必须写在类甩面 B java程序中可以有多个main方法 C.java程序中类名必须与文件名一样 D.JAVA程序的main方法中 ...
- java byte 判断相等_你真的了解Java中quot;==quot;和equals()的区别?
部分面试资料链接:https://pan.baidu.com/s/1qDb2YoCopCHoQXH15jiLhA 密码:jsam 想获得全部面试必看资料,关注公众号,大家可以在公众号后台回复" ...
- java 开发书籍 目录_《零基础 Java 开发 》全书目录
第1部分 Java开发基础 第一章 搭建Java开发环境 1.1 Java简介 1.2 Java开发环境搭建 1.3 Java语⾔的功能 1.4 使用Eclipse开发Java程序 1.5 使用IDE ...
- java class 文件分析_大概优秀的java程序员都要会分析class文件吧
相信大家在学java的时候都会听到这样的一些结论: enum 是一个类 泛型的实现使用了类型擦除技术 非静态内部类持有外部类的引用 需要将自由变量声明成final才能给匿名内部类访问 ... 初学的时 ...
最新文章
- markdown 使用
- CentOS 为Tomcat安装系统级Apr
- 三角数字(某年南理工研究生入学上机试题)
- 听说你想从事中间件开发?
- DataGrid方法标注
- 机器学习算法一览(附python和R代码)
- 2张表,轻松搞定你的收入问题
- 阿里开发规范文档_华为阿里等技术专家15年开发经验总结:SSM整合开发实战文档...
- Amazon Glacier的Scala客户端
- 独家总结| 一文读懂卡尔曼滤波
- Weblogic java生成wlfullclient.jar
- iOS 指纹识别常见问题汇总
- java中遍历Map几种方法
- 【转】数据库常用面试题
- 操作系统——四种进程调度算法模拟实现(C语言)
- Cadence16.6 最新83号补丁下载-Hotfix_SPB16.60.083_wint_1of1.exe
- 如何将照片裁剪为圆形?教你一招图片裁剪的技巧
- 微信分享 无法获取到分享状态的问题-微信分享功能调整
- iPhone6无法开机、不能开机的解决方法
- MPAndroidChart使用(BarChart为例)