黑马程序员技术交流社区
标题:
单例设计模式的一个小问题
[打印本页]
作者:
张宁
时间:
2013-3-9 10:51
标题:
单例设计模式的一个小问题
class Single{
private Single(){}
private static Single s = new Single();
pirvate static int age;
public void setAge(int age){
this .age = age;
}
public int ageAge(){
retrun age;
}
public static Single getInstance(){
return s;
}
}
class SingleDemo{
main...省略
Single ss = Single.getInstance();
ss.setAge(10);
s.o.p(ss.getAge);
}
复制代码
这个单例模式中,设置了两个非静态方法,就是setAge 和 getAge,如果我把single这个类中的所有变量和方法都改成静态的,就会提示无法从静态上下文中引用非晶态方法,为什么呢? 是不是说这个类不可以建立对象,所以栈内存中只能有 是这一个对象,对象又不能调用static 方法,所以说class 类里边的除了 getInstance()这个方法外,其他的方法都不能是static的? 这个代码的内存图谁能帮我划一下??
作者:
黑马朱超
时间:
2013-3-9 12:53
首先对象时建立在堆内存中的
其次 你把single中都变静态了,类也可以建立对象啊,但是对象的属性没法调用
作者:
王军行
时间:
2013-3-9 13:32
本帖最后由 王军行 于 2013-3-9 14:03 编辑
因为静态随着类的加载而加载。这时还没有对象题中你的setAge方法中引入了this ,this是对象 。对象还没有无法访问 。所以出现了这种情况,其他的你静态没有问题
对象不能调用static方法是怎么一说,static方法可以直接被类名调用,没有说不能被对象调用吧。
无标题.jpg
(48.85 KB, 下载次数: 31)
下载附件
2013-3-9 14:03 上传
作者:
Walking Walking
时间:
2013-3-9 16:41
静态方法的调用时通过类名Single直接访问的,不需要实力化,方法中的this在静态方法中就不能使用,但是可以通过Single.age 访问静态的属性。
这样写是允许的
class Single{
private static Single s = new Single();
private static int age;
public static void setAge(int age){
Single.age = age;
}
public static int ageAge(){
return age;
}
public static Single getInstance(){
return s;
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2