关于java单例模式的疑问。

expiator 2015-11-23 05:06:02

public class Single{
private static Single single=null; //先声明为null有什么意义?
private Single() { }
public static Single getInstance() {
if(single==null)
single=new Single();
return single;
}
}


1,为什么要先将single定为null呢?有什么用?
2,将这些方法和变量设为静态,有什么用?
...全文
223 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
nomasp 2015-11-24
  • 打赏
  • 举报
回复
就因为它是单例的,所以它只有一个……于是就用static设置为静态的了
zzq21212 2015-11-24
  • 打赏
  • 举报
回复
1,Null的问题。单例设计模式有两种形式,懒汉式和饿汉式,你写的是懒汉式,它的好处是,不用再每次家在类的时候就产生一个对象,而是在调用方法时再new 对象,需要的时候再创建,这算是与饿汉式不同的思维吧。2,静态的问题。因为是自己创建对象,所以getInstance方法必须是静态的,而静态只能访问静态,所以变量也要静态修饰。
密码测试 2015-11-24
  • 打赏
  • 举报
回复
引用
1,为什么要先将single定为null呢?有什么用? 2,将这些方法和变量设为静态,有什么用?
针对第一个问题,这是单例的模式问题:恶汉式: private static Single single=new Single(); 懒汉式: private static Single single=null; 推荐用恶汉式。 针对第二个问题:设为静态是为了能够访问,如果方法不是静态的就必须用对象来访问,但是因为构造方法是private的, 你无法构造对象,也就无法访问(是不是很矛盾)这就是单例的核心思想:你无法自己构建对象,只能用我提供的方法来获取对象,由我来保证对象唯一。
Cx_轩 2015-11-23
  • 打赏
  • 举报
回复
第一个问题 设置为Null,其实是为了定义一个全局的变量single而已 你不设置Null也可以的 private static Single single;这样默认的值就是null。 然后 写一个私有的构造方法是为了不让其被构造对象。(当一个类的构造方法被设置成private的时候,是不可以创建其构造方法对应的对象的) 最后一个 共有的 静态的 方法,然后在里面判断我们的全局静态的single是否是空,第一次是空的,如果是空就进行创建对象,然后single就不是空了,他代表的就是这个对象。 然后返回。我们可以通过类名.共有方法名获取到这个对象,私有成员在类被调用时候就开始被初始化了,而且只会初始化一次,所以在类时候的时候 ,静态成员已经构造完毕,然后内容共享,牵一发而动全身。 我的博客!欢迎关注,里面有你需要的内容
君莫傲 2015-11-23
  • 打赏
  • 举报
回复
初始化为null,当然是有用的,因为单例模式的初衷就是为了创建的对象唯一性,因此,可以得出,每次创建对象的时候都保证他是一个新的对象,让它为空,之后再予以赋值@
冰心的小屋 2015-11-23
  • 打赏
  • 举报
回复
public class Single{ private final static Single single=new Single(); private Single() { } public static Single getInstance() { return single; } } 你完全可以这样
livend 2015-11-23
  • 打赏
  • 举报
回复
声明static,意为类共有的,单例,看字面意思也就是一个实例,你要是private,public,你每次不得new出来,那还能单例吗
Usher丶AckMan 2015-11-23
  • 打赏
  • 举报
回复
面试题必考
piaopiao11 2015-11-23
  • 打赏
  • 举报
回复
也可以不为null private static Single single=new Single(); private Single() { } public static Single getInstance() { return single; } 1.为了每次get出来时候不用重新再new。 2.有时候在使用对象是需要带一些之前运行的状态,比如对象里面包含一个公用的数据列表。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧