黑马程序员技术交流社区

标题: 单例设计模式的懒汉式不理解啊。 [打印本页]

作者: 汤姆纳斯    时间: 2014-6-12 16:34
标题: 单例设计模式的懒汉式不理解啊。
本帖最后由 汤姆纳斯 于 2014-6-12 20:54 编辑

class Single
{
        private static Single s=null;
        private Single(){}
        public static Single getInstance()
        {
                if (s==null)
                s= new Single();
                return s;
        }
}
if后面是什么意思?


作者: yanghu    时间: 2014-6-12 17:00
s== null ,就是表示s没有指向Single类实例的引用,也就是表明还没有new一个Single类的实例,那么就创建一个,并返回。
作者: 黑马_白马    时间: 2014-6-12 17:45
用我的理解就是,思想就是不调用时不初始化,一旦调用时再初始化。所以,if后面是给s初始化呢,new一个对象。因为一开始s为空,if后在实例化。
作者: Super__kids    时间: 2014-6-12 17:58
这就是懒汉式的独特的地方,if是判断s的   ,如果s为空就执行下面的语句,生成一个对象,当然,懒汉式都为空,且都会生成对象,要不然就没有意义了。饿汉式就不会判断了,运行时就直接给你在堆内存里分配各空间。
作者: 不去会死    时间: 2014-6-12 18:42
任何类型的变量都有对应的默认的初始化值,好比int初始化值为0,String初始化值为null。你这个s 是你定义的person类型的变量,相当于C中的指针类型的变量。所以他初始化值为null. 意思是这个s没有任何内容
作者: yuZhe_toString    时间: 2014-6-12 19:14
就是很懒,不想先初始化,非得有人叫他他才初始化。
作者: crazystraw    时间: 2014-6-12 19:23
为了保证内存中只有一个Single对象才用if语句判断,如果内存中没有即为null,那么创建一个,如果内存中有Single对象,那么就用内存中的
作者: liujie445012100    时间: 2014-6-12 20:41
楼主真是标准的懒汉,if(s==null){}就说明没有指向的内存地址,你就给他指向一个不就完了嘛
作者: 汤姆纳斯    时间: 2014-6-12 20:54
想了想,懂了。
作者: alive    时间: 2014-6-12 22:18
就是到用的时候,才判断有没有Single类的对象,没有的话就创建一个对象




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2