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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙沛 中级黑马   /  2012-9-5 15:13  /  1682 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Single{
        private static Single s = new Single();
        private Single(){};
        public static Single getInstance(){
                return s;
        }
        public void setName(String name){
                this.name = name;
                }
        public String getName(){
                return name;
        }
}

class Demo1{
        public static void main(String[] args){
                Single ss = Single.getInstance();
                ss.setName("dddd");
                String gg = ss.getName();
                System.out.println(gg);
        }
}

大家帮我看下,为什么编译不通过

点评

这种细节问题以后要多注意点,不然哪里出错了都不知道  发表于 2012-9-5 18:20

6 个回复

倒序浏览
class Single{
         private static Single s = new Single();
         private Single(){};
         public static Single getInstance(){
                 return s;
         }
         public void setName(String name){
                 this.name = name;//this.name 应该指向一个成员变量name,但是你成员变量根本没有定义呀。错误就在这里
                 }
         public String getName(){
                 return name;//这里也会有编译错误。name没有定义
         }
}

class Demo1{
         public static void main(String[] args){
                 Single ss = Single.getInstance();
                 ss.setName("dddd");
                 String gg = ss.getName();
                 System.out.println(gg);
         }
}
回复 使用道具 举报
你single类里面的 成员变量name没有定义

评分

参与人数 1技术分 +1 收起 理由
田建 + 1 继续加油!

查看全部评分

回复 使用道具 举报
Single中未定义name变量,如何赋值?粗心。

评分

参与人数 1技术分 +1 收起 理由
田建 + 1 新手鼓励!

查看全部评分

回复 使用道具 举报
class Single{
         private static Single s = new Single();
         private Single(){};
         public static Single getInstance(){
                 return s;
         }
         public void setName(String name){
                 this.name = name;  -------------->>本类中的变量name不存在,所以报错了。
                 }
         public String getName(){
                 return name;
         }
}

class Demo1{
         public static void main(String[] args){
                 Single ss = Single.getInstance();
                 ss.setName("dddd");
                 String gg = ss.getName();
                 System.out.println(gg);
         }
}
回复 使用道具 举报
  1. class Single
  2. {
  3.         private static Single s = new Single();

  4.         private String name; //错误原因是你没有定义对象的属性,name
  5.        
  6.         private Single(){};
  7.         public static Single getInstance(){
  8.                         return s;
  9.         }
  10.         public void setName(String name){
  11.                         this.name = name;
  12.                         }
  13.         public String getName(){
  14.                         return name;
  15.         }
  16. }

  17. class SingleDemo
  18. {
  19.         public static void main(String[] args)
  20.         {
  21.                 Single ss = Single.getInstance();
  22.                 ss.setName("dddd");
  23.                 String gg = ss.getName();
  24.                 System.out.println(gg);
  25.         }
  26. }
复制代码
其实单例设计模式挺叼的,尤其是懒汉式问题最多,它是Single类进内存时,还没有创建对象,在调用到方法getInstance()时,才开始创建对象,
但是要是在多线程的情况下可能会出现对象不唯一。

我们开发的时候还是使用饿汉式比较好。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马