A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 不破大地 中级黑马   /  2013-5-2 17:04  /  1793 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 不破大地 于 2013-5-4 11:02 编辑

在下面的程序中,为啥d2和d1的值是一样的啊,求教??

package fuxi;

public class danli
{
           public int num;
           public void setNum(int num)
           {
                   this.num=num;
           }
           public int getNum()
           {
                   return num;
           }
       danli(){}
       static danli d=new danli();
       public static danli getInstance()
       {
               return d;
       }
      
       public static void main(String[] args)
       {            
         danli d1=danli.getInstance();
         danli d2=danli.getInstance();
         d1.setNum(69);
         danli d3=new danli();
         d3.setNum(5);
         System.out.println(d2.getNum());
       }
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

6 个回复

正序浏览
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
因为d1,d2在调用getInstance()方法的时候,它们都指向了方法中的d,而static SingleTest d=new SingleTest()中的d是唯一的
回复 使用道具 举报
  首先我想说  你这个貌似就不是单例模式  单例模式是所有的引用都指向一个对象   你的构造不私有话 怎么可能是单例。 在者 你d1和d2同时指向了一个对象 d 当然d1和d2的值是相同的  下面你new出来了个新对象 他的值肯定不一样。

public class danli
{
           public int num;
           public void setNum(int num)
           {
                   this.num=num;
           }
           public int getNum()
           {
                   return num;
           }
       danli(){}
       static danli d=new danli();
       public static danli getInstance()
       {
               return d;
       }
      
       public static void main(String[] args)
       {            
         danli d1=danli.getInstance();
         danli d2=danli.getInstance();
         d1.setNum(69);
         System.out.println(d1.getNum());  //输出 69
         System.out.println(d2.getNum());// 输出  69
         danli d3=new danli();
         d3.setNum(5);
         System.out.println(d3.getNum());  //输出 5
       }
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
  1. package exercises;

  2. public class SingleTest
  3. {
  4.            public int num;
  5.            public void setNum(int num)
  6.            {
  7.                    this.num=num;
  8.            }
  9.            public int getNum()
  10.            {
  11.                    return num;
  12.            }
  13.            SingleTest(){}//你的你不算单例设计,构造器必须私有化.
  14.        static SingleTest d=new SingleTest();
  15.        public static SingleTest getInstance()
  16.        {
  17.                return d;
  18.        }
  19.       
  20.        public static void main(String[] args)
  21.        {            
  22.                SingleTest d1=SingleTest.getInstance();
  23.                SingleTest d2=SingleTest.getInstance();
  24.          d1.setNum(69);
  25.          SingleTest d3=new SingleTest();//你在这里构建了一个新的对象.是new出来的.值肯定不一样.
  26.          d3.setNum(5);
  27.          System.out.println("d1="+d1.getNum()+" d2="+d2.getNum()+" d3="+d3.getNum());
  28.          //d1=69 d2=69 d3=5答案是对的.
  29.        }
  30. }
复制代码
回复 使用道具 举报
因为d1和d2是指向同一个对象。
  static danli d=new danli();//随着类的加载而加载。创建了对象d
   public static danli getInstance()
   {
                return d;
  }
主函数调用getInstance这个方法。
相当于   danli d1= d;
          danli d2=d;
所以d1和d2指向的是同一个对象。 只是变量名不同。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马