黑马程序员技术交流社区

标题: 给位亲,帮忙解决一下这个问题,关于单例模式同步的 [打印本页]

作者: 王小忠    时间: 2014-11-25 00:52
标题: 给位亲,帮忙解决一下这个问题,关于单例模式同步的
如果将同步对象换成instance将会报空指针异常,为什么?
代码如下:
class ArraysTools {
        /**
         * 单利--懒汉模式 ①:将构造器私有化 ②:声明一个ArraysTools 实例对象instance,初始值为null;
         * ③:对外提供一个公共的静态方法,并作同步,用来获得instance
         */
        private static ArraysTools instance = null;

        private ArraysTools() {

        }

        public static ArraysTools getInstatce() {
                synchronized (ArraysTools.class) {//如果将同步对象换成instance将会报空指针异常,为什么?
                        if (instance == null) {
                                instance = new ArraysTools();
                        }
                        return instance;
                }
        }
作者: cbb    时间: 2014-11-25 01:06
......因为读到这句话的时候 ,你的本类对象还没建立!是null 它肯定出现空指针异常啊
作者: sin    时间: 2014-11-25 01:10
这段代码没有问题啊??、
作者: 壹贰叁    时间: 2014-11-25 04:07
instance 对象都还没创建呢?你上面不是自己定义好了吗?
作者: zhangyangLengen    时间: 2014-11-25 12:58
Synchronized 中必须是对象,而且对象不能为空,但是你,上面一开始是Instance对象是空
作者: hailong    时间: 2014-11-25 14:07
本帖最后由 hailong 于 2014-11-25 14:08 编辑

方法是静态的,静态进内存时,内存中没有本类对象,需要使用该类对应的字节码文件对象,也就是ArraysTools.class做为锁
作者: mmppp    时间: 2014-11-25 15:14
代码没有问题啊
作者: DamonZh    时间: 2014-11-25 22:38
第一次拿锁对象还没建立嘛,所以空指针异常
作者: chen_32768    时间: 2014-11-25 23:03
没创建对象,要创建这个对象并赋予
作者: 天涯无痕    时间: 2014-11-25 23:26
锁的顺序啊




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