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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 半夜雨半夜雨 中级黑马   /  2013-11-5 20:10  /  1227 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 半夜雨半夜雨 于 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()反访问?求解。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

6 个回复

倒序浏览
static 修饰的对象是保存在这个类对象中的,在java程序运行开始的时候会将所有类加载带内存中,静态成员将直接保存在这个类下,这个类在内存中只有一个,而实例化出来的对象都会开辟新的内存空间,所以使用static保存这个对象视为了使内存中只存储一个Single对象!这样一来,你在实例化Single的时候只能通过getInstance方法,因为构造函数已经被置为private了。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
单例:把构造器私有,不让随便new对象
私有后就不能在外面new对象了 因此只能在本类中new 而在本类中new了之后必须将这个对象提供出去,建立一个方法getInstance,
这时外面想要用这个对象,但因为不能new构造器 ,因此只能通过类名来调用类中的方法getInstance ,所以getInstance方法必须静态,
而getInstance方法静态,想要调用s,则s必须为静态

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
public static Single getInstance() { return s; }
方法体中的全局变量只能是对象变量和类变量两种中的一种,这个貌似有些绕口,正常点的说法是:
你这个返回的 s 要么是 this.s 要么是 Single.s 只是把前缀省略了
因为静态方法中是不能出现this关键字的,所以只有静态的全局变量才能传入静态方法体里面
回复 使用道具 举报
因为这个方法是静态的  这个方法不能访问非静态成员   所以加static
回复 使用道具 举报
请看我的注解:
  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. }
复制代码
回复 使用道具 举报

:lol明白了,多谢各位
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马