A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 风飘逸 中级黑马   /  2015-3-26 18:41  /  1074 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在单例设计模式中,如果在不同的类中调用具有私有构造函数的类中的获得对象的方法,获得的对象是一个对象吗?不是每次调用该方法的时候该类在内存中的状态是怎么样的,老感觉每次调用该方法,都会新new一个类

2 个回复

倒序浏览
本帖最后由 黑色救护车 于 2015-3-27 09:09 编辑

不会的,你看毕老师画的那个图了吗?每次调用getInstance()方法的时候,其实都是将堆内存中同一个对象的内存地址赋给不同的栈内存中变量而已,因此所有引用都指向堆内存中同一个对象。new Single对象的过程是在Single类当中完成的,由于Single类的构造方法是私有,其他程序没有办法new出Single对象。其他程序要得到Single对象,只能通过getInstance()方法,而getInstance()方法返回的都是Single类中new出来的Single对象,这是唯一的。老师没有去new对象喔,老师只是在另一个类中调用Single类的方法,而private static Single s = new Single();这句话只会执行一次喔!

如上图,比如再来一个Single s1 = Single.getInstance();
1)在栈内存开一个空间储存s1;
2)getInstance()方法返回一个Single对象s,将Single对象的内存地址赋给s1;
3)即s1同样也指向Single对象


回复 使用道具 举报
不错不错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马