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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

如果将同步对象换成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;
                }
        }

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 淡定

查看全部评分

9 个回复

倒序浏览
cbb 中级黑马 2014-11-25 01:06:58
沙发
......因为读到这句话的时候 ,你的本类对象还没建立!是null 它肯定出现空指针异常啊

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
sin 中级黑马 2014-11-25 01:10:43
藤椅
这段代码没有问题啊??、
回复 使用道具 举报
instance 对象都还没创建呢?你上面不是自己定义好了吗?
回复 使用道具 举报
Synchronized 中必须是对象,而且对象不能为空,但是你,上面一开始是Instance对象是空
回复 使用道具 举报
本帖最后由 hailong 于 2014-11-25 14:08 编辑

方法是静态的,静态进内存时,内存中没有本类对象,需要使用该类对应的字节码文件对象,也就是ArraysTools.class做为锁
回复 使用道具 举报
mmppp 中级黑马 2014-11-25 15:14:09
7#
代码没有问题啊
回复 使用道具 举报
DamonZh 中级黑马 2014-11-25 22:38:46
8#
第一次拿锁对象还没建立嘛,所以空指针异常
回复 使用道具 举报
没创建对象,要创建这个对象并赋予
回复 使用道具 举报
锁的顺序啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马