免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1447 | 回复: 3
打印 上一主题 下一主题

请教关于static 方法和单例模式问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-19 17:13 |只看该作者 |倒序浏览
一个单例模式代码:
public class SingletonTest
{
        public static void main(String[] args)
        {
                Singleton singleton = Singleton.getInstance();
                Singleton singleton2 = Singleton.getInstance();

                System.out.println(singleton == singleton2);
        }
}

class Singleton
{
        private static Singleton singleton = new Singleton();
       
        private Singleton()
        {
               
        }

        public static Singleton getInstance()
        {
               
                return singleton;
        }


}

singleton 和singleton2相同,是同一个对象,为什么呢?主要就是private static Singleton singleton = new Singleton();
这一句,加了static是不是说new Singleton()只执行一次,第一次Singleton singleton = Singleton.getInstance();时加载Singleton,初始化Singleton属性,第二次
Singleton singleton2 = Singleton.getInstance();时,因为内存中有singleton属性,就不new Singleton(),直接返回原singleton呢???
请大侠给解释解释,谢谢

论坛徽章:
0
2 [报告]
发表于 2012-04-19 22:57 |只看该作者
这里使用的是饿汉式单例,对于private static Singleton singleton = new Singleton();有解释说jvm保证singleton只被初始化一次,这是一个什么机制????

论坛徽章:
0
3 [报告]
发表于 2012-04-23 23:04 |只看该作者
还真是冷清啊

是不是可以这样理解啊,对于
private static Singleton singleton = new Singleton();
可以看成这样:
private satic Singleton singleton;
static {singleton = new Singleton(); }
因为静态块只在类加载的时候执行一次,所以不管调用多少次,private static Singleton singleton = new Singleton();只执行一次,所以也就只有一个对象了。

论坛徽章:
3
卯兔
日期:2013-08-15 13:17:31处女座
日期:2014-01-10 11:35:23双子座
日期:2014-01-25 02:16:06
4 [报告]
发表于 2012-04-23 23:48 |只看该作者
我的解释不一定对,我的理解是,对象只通过构造器生成,
  1. Singleton singleton = Singleton.getInstance();
  2. Singleton singleton2 = Singleton.getInstance();
复制代码
调用了两次方法,但只调用了一次构造器。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP