黑马程序员技术交流社区

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

作者: 半夜雨半夜雨    时间: 2013-11-5 20:10
标题: 单例设计模式
本帖最后由 半夜雨半夜雨 于 2013-11-5 22:28 编辑
  1. class Single{
  2.         private Single(){}

  3.         private static Single s=new Single();

  4.         public static Single getInstance(){//没有对象的时候用类名调用方法,用static修饰
  5.         
  6.         return s;
  7.         }


  8. }
复制代码
看了视频,没听清毕老师怎么讲的,为什么对象面前要加static,难道是让这个类只可以让getInstance()反访问?求解。
作者: ~﹏~    时间: 2013-11-5 20:34
static 修饰的对象是保存在这个类对象中的,在java程序运行开始的时候会将所有类加载带内存中,静态成员将直接保存在这个类下,这个类在内存中只有一个,而实例化出来的对象都会开辟新的内存空间,所以使用static保存这个对象视为了使内存中只存储一个Single对象!这样一来,你在实例化Single的时候只能通过getInstance方法,因为构造函数已经被置为private了。
作者: ixiangfeng    时间: 2013-11-5 20:52
单例:把构造器私有,不让随便new对象
私有后就不能在外面new对象了 因此只能在本类中new 而在本类中new了之后必须将这个对象提供出去,建立一个方法getInstance,
这时外面想要用这个对象,但因为不能new构造器 ,因此只能通过类名来调用类中的方法getInstance ,所以getInstance方法必须静态,
而getInstance方法静态,想要调用s,则s必须为静态
作者: 零下五度的水    时间: 2013-11-5 21:28
public static Single getInstance() { return s; }
方法体中的全局变量只能是对象变量和类变量两种中的一种,这个貌似有些绕口,正常点的说法是:
你这个返回的 s 要么是 this.s 要么是 Single.s 只是把前缀省略了
因为静态方法中是不能出现this关键字的,所以只有静态的全局变量才能传入静态方法体里面

作者: Sasson    时间: 2013-11-5 21:46
因为这个方法是静态的  这个方法不能访问非静态成员   所以加static
作者: wenbaoxing    时间: 2013-11-5 22:19
请看我的注解:
  1. class Single {
  2.        
  3.         //将构造函数私有,目的是在Single这个类外面不可以创建Single这个类的对象了,
  4.         //这是因为private这个关键字修饰的函数只能在类内部访问
  5.         private Single() {
  6.         }

  7.         //这个Single对象前面加一个static修饰符,目的是让这个对象随着Single类加载的时候就创建
  8.         private static Single s = new Single();

  9.         //函数如果被public static修饰了,表明这个函数既可以被类名直接调用也可以被这个类的对象调用,
  10.         //但我们此时一般用类名直接调用
  11.         public static Single getInstance() {// 没有对象的时候用类名调用方法,用static修饰

  12.                 return s;
  13.         }

  14. }
复制代码

作者: 半夜雨半夜雨    时间: 2013-11-5 22:27
wenbaoxing 发表于 2013-11-5 22:19
请看我的注解:

:lol明白了,多谢各位




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