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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 殷婷婷 中级黑马   /  2013-6-8 14:37  /  1715 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 殷婷婷 于 2013-6-8 16:08 编辑

class Singel
{
private static final Single s=new Single();
private Single()
{
}
public static Single getInstance()
{
return s;
}
在上段饿汉式的代码中,变量s为什么要用static修饰啊?
是因为getInstance是静态方法,所以访问的s也需要是静态的吗?

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

7 个回复

倒序浏览
个人觉得,因为这个类中的构造函数是私有的,没办法在别的类中构建,所有需要静态方法来获取实例,所以getInstance(),要用static来修饰,可直接用类名调用,       即类名.方法名静态方法只能访问静态成员,所以s也需要是静态修饰。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  1. class Single
  2. {
  3. private static Single s=null;
  4. private Single(){}
  5. public static synchronized Single getInstance()
  6. {
  7. if(s==null)
  8. s=new Single();
  9. return s;
  10. }
  11. }
复制代码
Single类进内存,对象还没有存在,只有调用了getInstance()方法时,才建立对象。刚开始时不做,什么时候需要什么时候做。
synchronized是给该方法上锁,当有一个对象操作该方法时,别的对象就不能操作。是为了防止两个对象同时操作该方法。

回复 使用道具 举报
是的  因为getInstance()方法也是静态的,而静态方法在虚拟机运行时就已经存在于方法区中了,所以它所涉及的访问成员不可能是非静态的,于是S同样必须是静态
回复 使用道具 举报
在饿汉式单列设计代码中。是因为getInstance是静态方法,所以s也要被static修饰。但是饿汉式在类加载的时候这个对象也存在于堆内存中了。
回复 使用道具 举报
是因为getInstance是静态方法,所以访问的s也需要是静态的吗?

可以这样说 是的。

但严格来说 是因为s是静态的 所以 方法才是静态方法


单例设计模式 就是这个s  可以说是个共享对象,
既然是个共享对象  且是final修饰的  何不用static修饰  以便可以直接调用呢。。

一般共享数据 都可以定义成静态的  
直接拿去用 省的用一次 要new一次这个数据所在的类

因为s是静态  获取s的函数就要静态   
回复 使用道具 举报
1、用static修饰,逻辑上想表示为共有的、共享的,全局的;
2、public static Single getInstance()是一个简单的静态工厂方法,静态方法不能调用非静态的属性;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马