黑马程序员技术交流社区

标题: 关于单例设计模式的一个问题 [打印本页]

作者: 刘宁    时间: 2012-3-12 19:55
标题: 关于单例设计模式的一个问题
class  Single
{
        private Single(){}

        private static Single s = new Single();

        public static Single getinstance()
        {
                return s;
        }
}  这个类中,建立的本类对象是静态,为什么静态中的S值还能指向堆内存哪?不是静态方法只能访问静态成员吗?
作者: 杨毅    时间: 2012-3-12 20:21
s是静态成员嘛.....
作者: 王睿    时间: 2012-3-12 20:59
private static Single s = new Single();
new Single 把地址值赋给了s  这个就相当于   static s = 0x9222;   静态的也能赋值啊

作者: 潘许超    时间: 2012-3-12 23:50
只是获取了地址,这是静态引用
作者: a504079589    时间: 2012-3-13 01:22
s本来就是静态的啊, 你在 private static Single s = new Single(); 的时候, 就等于把new出的Single() 赋给了s;
而new出的Single()是存在于堆内存之中, 为引用;
单例设计模式 就是为了保证在程序中的某个类只存在一个对象, 所以把构造函数私有了, 但是这个类又不能创建对象, 就在这个类的内部自己创建一个对象并用成员变量记住它,也正因为这个类不能创建对象, 此成员变量需要是静态的, 还能让类加载的时候创建唯一的对象, 为了提高了安全性,外界也无法修改的同时要把成员变量也私有化, 提供一个公有的方法用来获取唯一的对象, 由于需要在不创建对象的情况下使用, 所以也要静态;


作者: 黑马张平    时间: 2012-3-13 13:05
学习学习!





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