黑马程序员技术交流社区

标题: 单例设计 [打印本页]

作者: 沈浩    时间: 2013-4-13 03:51
标题: 单例设计
本帖最后由 沈浩 于 2013-4-14 02:28 编辑

class Lazy
{
        private static Lazy l= null;
         private Lazy(){}
         public static Lazy getLazy()
        {
            if(l==null)
            {
                   if(l==null)
                       {
                           l = new Lazy();//为什么把这句加个Lazy结果就是null呢?(就是这句Lazy l = new Lazy();)
                      }
              }
                 return l;
         }
}
作者: Friendy89    时间: 2013-4-13 06:05
本帖最后由 Friendy89 于 2013-4-13 06:06 编辑

这个是单例设计模式中懒汉式的书写格式,如果你Lazy l = new Lazy();就相当于又新建了一个Lazzy对象,由于你在函数开始将Lazzy l 初始化为null了,所以返回 l 时输出为null
作者: lipingan0520    时间: 2013-4-13 10:34
  1. class Lazy
  2. {               
  3.          private static Lazy l= null;
  4.          private Lazy(){}
  5.          public static Lazy getLazy()
  6.          {
  7.             if(l == null)
  8.             {
  9.                  synchronized(Lazy.class)        //在多线程的情况,加上这句更严谨哦。
  10.                                  {
  11.                                          if(l == null)
  12.                        {
  13.                            l = new Lazy();//为什么把这句加个Lazy结果就是null呢?(就是这句Lazy l = new Lazy();)
  14.                        }
  15.                                  }
  16.                          }
  17.             
  18.                          return l;
  19.          }
  20. }
复制代码

作者: 、__WSD吴少东    时间: 2013-4-13 21:40
l = new Lazy();  l  是全局变量,
Lazy l = new Lazy();  -->    Lazy l ;  l = new Lazy();   使用的时局部变量,  return 返回的是全局变量的 l  ,我是这样理解的,
  1. class Lazy
  2. {
  3.          private static Lazy l= null;
  4.           private Lazy(){}
  5.           public static Lazy getLazy()
  6.          {
  7.              if(l==null)
  8.              {
  9.                     if(l==null)
  10.                     {
  11.                       Lazy a = new Lazy();//为什么把这句加个Lazy结果就是null呢?(就是这句Lazy l = new Lazy();)
  12.                     }
  13.                                        
  14.               }
  15.               return a;

  16.           }
  17. }
  18. class Demo1
  19. {
  20.          public static void main(String[] args)
  21.          {
  22.                  System.out.println(Lazy.getLazy());
  23.          }

  24. }
复制代码
因为把这个换成a,  编译报错是找不到符号。




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