黑马程序员技术交流社区
标题: 单例设计模式的问题 [打印本页]
作者: 殷婷婷 时间: 2013-6-8 14:37
标题: 单例设计模式的问题
本帖最后由 殷婷婷 于 2013-6-8 16:08 编辑
class Singel
{
private static final Single s=new Single();
private Single()
{
}
public static Single getInstance()
{
return s;
}
在上段饿汉式的代码中,变量s为什么要用static修饰啊?
是因为getInstance是静态方法,所以访问的s也需要是静态的吗?
作者: 张俊生 时间: 2013-6-8 15:12
个人觉得,因为这个类中的构造函数是私有的,没办法在别的类中构建,所有需要静态方法来获取实例,所以getInstance(),要用static来修饰,可直接用类名调用, 即类名.方法名静态方法只能访问静态成员,所以s也需要是静态修饰。
作者: 夏一站 时间: 2013-6-8 15:49
- class Single
- {
- private static Single s=null;
- private Single(){}
- public static synchronized Single getInstance()
- {
- if(s==null)
- s=new Single();
- return s;
- }
- }
复制代码Single类进内存,对象还没有存在,只有调用了getInstance()方法时,才建立对象。刚开始时不做,什么时候需要什么时候做。
synchronized是给该方法上锁,当有一个对象操作该方法时,别的对象就不能操作。是为了防止两个对象同时操作该方法。
作者: 黄辉 时间: 2013-6-8 15:51
是的 因为getInstance()方法也是静态的,而静态方法在虚拟机运行时就已经存在于方法区中了,所以它所涉及的访问成员不可能是非静态的,于是S同样必须是静态
作者: 郭天龚 时间: 2013-6-8 15:51
在饿汉式单列设计代码中。是因为getInstance是静态方法,所以s也要被static修饰。但是饿汉式在类加载的时候这个对象也存在于堆内存中了。
作者: 曹宇 时间: 2013-6-8 17:53
是因为getInstance是静态方法,所以访问的s也需要是静态的吗?
可以这样说 是的。
但严格来说 是因为s是静态的 所以 方法才是静态方法
单例设计模式 就是这个s 可以说是个共享对象,
既然是个共享对象 且是final修饰的 何不用static修饰 以便可以直接调用呢。。
一般共享数据 都可以定义成静态的
直接拿去用 省的用一次 要new一次这个数据所在的类
因为s是静态 获取s的函数就要静态
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |