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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王德云 金牌黑马   /  2011-11-22 22:37  /  2288 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 wangdeyun 于 2011-11-23 09:23 编辑
  1. class Single {
  2.         private static Single s = null;
  3.         private Single() {}
  4.         public static Single getInstance() {
  5.                 if (s == null) {
  6.                         synchronized (Single.class)
  7.                         {
  8.                                 if (s == null)
  9.                                         s = new Single();
  10.                         }
  11.                 }
  12.                 return s;
  13.         }
  14. }
复制代码
synchronized (Single.class)中Single.class可以 用this代替吗?
synchronized()括号里面传的是对象,那Single.class可以理解成Single的一个实例对象吗?

3 个回复

倒序浏览
class Single {
        private static Single s = null;
        private Single() {}
        public static Single getInstance() {
                if (s == null) {
                        synchronized (Single.class)
                        {
                                if (s == null)
                                        s = new Single();//在没有执行该语句前,这个类是没有实例对象的,不执行构造函数不可能凭空出来实例对象吧                        }
                }
                return s;
        }
}

在没有实例化对象前是没有this的,所以不能用this替代;
single.class 是字节码文件,就是你编译后产生的  .class 文件,不是single的实例化对象
回复 使用道具 举报
崔浩 黑马帝 2011-11-23 07:09:53
藤椅
静态代码块中不能出现对象的身影(this),还有就是标志位,就是要找到一个比较统一的,
Single.class是表示这个类在内存中的字节码,在内存中只有一份

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
楼上两个解释的很有道理,顶一个,我在此不再赘述了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马