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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘宁 中级黑马   /  2012-3-12 19:55  /  1560 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class  Single
{
        private Single(){}

        private static Single s = new Single();

        public static Single getinstance()
        {
                return s;
        }
}  这个类中,建立的本类对象是静态,为什么静态中的S值还能指向堆内存哪?不是静态方法只能访问静态成员吗?

5 个回复

倒序浏览
s是静态成员嘛.....
回复 使用道具 举报
private static Single s = new Single();
new Single 把地址值赋给了s  这个就相当于   static s = 0x9222;   静态的也能赋值啊
回复 使用道具 举报
只是获取了地址,这是静态引用
回复 使用道具 举报
s本来就是静态的啊, 你在 private static Single s = new Single(); 的时候, 就等于把new出的Single() 赋给了s;
而new出的Single()是存在于堆内存之中, 为引用;
单例设计模式 就是为了保证在程序中的某个类只存在一个对象, 所以把构造函数私有了, 但是这个类又不能创建对象, 就在这个类的内部自己创建一个对象并用成员变量记住它,也正因为这个类不能创建对象, 此成员变量需要是静态的, 还能让类加载的时候创建唯一的对象, 为了提高了安全性,外界也无法修改的同时要把成员变量也私有化, 提供一个公有的方法用来获取唯一的对象, 由于需要在不创建对象的情况下使用, 所以也要静态;

回复 使用道具 举报
学习学习!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马