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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李东梁 中级黑马   /  2014-3-24 19:21  /  1816 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李东梁 于 2014-3-25 10:49 编辑
  1. class Single
  2. {

  3.         //2,自定义一个本类对象。
  4.         private static Single s = new Single();
  5.         //1,私有化构造函数。
  6.         private Single(){}

  7.         //3,定义一个方法返回该对象。让其他程序通过这个方法就可以获取该对象。
  8.         public static Single getInstance()
  9.         {
  10.                 System.out.println("s="+s);
  11.                 return s;
  12.         }
  13. }
  14. class SingleDemo
  15. {
  16.         public static void main(String[] args)
  17.         {
  18.                 Single s1 = Single.getInstance();
  19.                 System.out.println("s1="+s1);
  20.                
  21.         }
  22. }
复制代码

老毕讲的单例设计步骤:
1,不让其他程序创建该类对象。
2,在本类中自己创建一个本类对象。
3,对外还提供一个获取该对象的方法。

为什么成员被设置成静态的了?

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

5 个回复

倒序浏览
方法被访问只有两种方式,对象调用和类名调用,单例中没有对象了,只有类名调用,所以只能方法必须静态。
静态方法访问的也必须是静态成员。
回复 使用道具 举报
既然私有化构造函数,不能创建对象。所以用静态就能通过类名调用。
回复 使用道具 举报
因为单例设计模式是无法new 对象的。所以对外提供的调用本类对象的方法必须用类名去调用。而可用被类名直接调用的只有静态方法或者静态函数。给成员变量加静态,是因为静态方法中只能调用静态函数。如果private static Single s = new Single(); 不被静态的话。在单例中的静态函数中是无法调用它的。所以。自己建立本类对象。必须要加静态。如果不加静态的话。就无法在对象被本类私有化后往外提供使用本类对象的方法。那么你设计的单例中的所有对象都无法被外部访问。你的程序也就没有任何意义了

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
你看哦。。。这个方法调用时没有传入任何参数。。 那你获得它的时候,那个对象从哪里来呢? 所以说里面肯定有个成员变量,返回的是成员变量。 那如果不定义成static 静态的, 每一次调用这个方法时,会创建新的成员变量给调用的那个对象,这样就不是单例模式了。。。 static 的作用就是这个成员变量一创建就是唯一的,不管多少个对象调用它,都是返回的这个成员变量(内存中的地址都是一样的)

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
public static Single getInstance()这句话怎么访问?方法被调用只有两种方式,1、要么对象2、要么类名,现在没有对象,就用类名调用,能用类名调用,这方法必须是静态,静态方法访问静态成员,private static Single s = new Single();所以成员变量要是静态的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马