黑马程序员技术交流社区

标题: 帮忙解释下两个代码的不同!! [打印本页]

作者: darkpiece    时间: 2014-1-23 21:15
标题: 帮忙解释下两个代码的不同!!
class Single
{
        private static final  Single S = new Single();
        Single(){}

        public static Single getInstance()
        {
                s = new Single();
                return s;
        }
}

class Single2
{
        private static  Single2 s = null;
        private Single2(){}
        public static Single2 getInstance()
        {
                if(s ==null)
                        s = new Single2();
                return s ;
        }
}
第一个代码是不是说final修饰了一个s对象,不能再在方法中定义s对象了。。
再帮忙解释下第二个代码。谢谢了
作者: 付江涛    时间: 2014-1-23 21:27
{:soso__16952254467664163835_3:}

表示还没学到。。。无能为力。。。

捧个人场~~
作者: 山治0712    时间: 2014-1-23 21:54
1,创建私有并静态的本类对象;2,私有化构造函数;  3,定义公有并静态的方法,返回该对象。
作者: skyname    时间: 2014-1-23 22:50
同学,你确定你第一个程序没有写错?第一个是“饿汉式”,在getInstance()方法中是没有s = new Single();这一句的。其实不用finally修饰,也是可以的。
这是“饿汉式”和“懒汉式”的两个小程序。饿汉式,先初始化对象,Single类一进内存,就已经创建好了对象。“懒汉式”,Single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象,对象是方法被调用时才初始化的,也叫对象的延时加载,所以,在多线程的时候容易出问题,一般都会在getInstance()方法中在初始化对象时加上一个锁,以确保安全。“饿汉式”和“懒汉式”在面试时,有时可能会问到,不管理不理解,先背下来再说。
作者: darkpiece    时间: 2014-1-23 23:54
skyname 发表于 2014-1-23 22:50
同学,你确定你第一个程序没有写错?第一个是“饿汉式”,在getInstance()方法中是没有s = new Single();这 ...

代码应该没问题,我直接粘贴过来的,是复习的时候看到这两段代码,一下懵了。。
你一说我就知道了,谢谢了




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