黑马程序员技术交流社区

标题: 单例设计模式中的if判断问题 [打印本页]

作者: Laopozini123    时间: 2016-4-4 11:21
标题: 单例设计模式中的if判断问题
  1. //懒汉式,单例的延迟加载模式
  2. class Singleton {
  3. //1,私有构造函数
  4. private Singleton(){}
  5. //2,声明一个本类的引用
  6. private static Singleton s;
  7. //3,对外提供公共的访问方法
  8. public static Singleton getInstance() {
  9. if(s == null)
  10. //线程1,线程2
  11. s = new Singleton();
  12. return s;
  13. }

  14. public static void print() {
  15. System.out.println("11111111111");
  16. }
  17. }
复制代码
以上代码是单例设计模式,我想问里面的if(s == null)判断是什么意思?他判断的是什么?  自己声明一个引用,还要判断其是不是为null吗?

作者: 守徒徒    时间: 2016-4-4 14:06
所谓单例设计模式,也就是说内存中自始至终最多只能有一个对象存在,大家都共享这个对象。判断是不是为null就是饿汉式与懒汉式的区别。饿汉式:不管三七二十一,一旦初始化程序时就创建该对象,所以不用判断是不是为null,直接private static Singleton s = new Singleton(),然后用到时直接获取返回即可;而懒汉式则在需要用到该对象时才创建,程序初始化时private static Singleton s = null,此时该对象还不存在,如果用到时就要判断是不是为null,如果是就创建该对象并返回,否则直接返回即可。这是我自己的理解!
作者: Laopozini123    时间: 2016-4-5 07:22
守徒徒 发表于 2016-4-4 14:06
所谓单例设计模式,也就是说内存中自始至终最多只能有一个对象存在,大家都共享这个对象。判断是不是为null ...

谢谢,其实就是静态加载的问题,static先加载并不赋值,调用的时候再赋值
作者: 守徒徒    时间: 2016-4-5 15:00
Laopozini123 发表于 2016-4-5 07:22
谢谢,其实就是静态加载的问题,static先加载并不赋值,调用的时候再赋值

不客气,是的




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