黑马程序员技术交流社区
标题:
关于静态不能访问动态的问题
[打印本页]
作者:
封号了...
时间:
2013-8-8 15:30
标题:
关于静态不能访问动态的问题
一般来说在类加载的时候是先加载静态的再加载非静态的,所以静态不能访问非静态的
但是是不是跟单例模式有矛盾呢:
private NumberMachine() {
}
private static NumberMachine instance = new NumberMachine();
public static NumberMachine getInstance() {
return instance;
}
再看看下面这个问题:
class Date {
// 下面两行代码换位置结果就会出现不同
private static int mx = 0;
private static final Date mInstance = new Date();
private Date() {
System.out.println("mx=" + mx);
mx = getVersion();
}
public static Date getInstance() {
return mInstance;
}
public int getVersion() {
int v = 0;
if (v == 0) {
v = 7;
}
return v;
}
public int getmx() {
return mx;
}
}
public class TestStatic {
public static void main(String args[]) {
System.out.println(Date.getInstance().getmx());
}
}
求解释!
作者:
王清华0
时间:
2013-8-8 16:54
第一个问题;静态变量是在类加载时初始化,实例变量是在实例化(new)一个对象时才会初始化所以静态成员不能访问非静态成员,因为非静态成员有可能没有实例化。
这里private static NumberMachine instance = new NumberMachine();实例化一个对象,不是访问非静态成员。
第二个问题:static成员和 块 的初始化顺序遵循其在类中的定义顺序。
你的第二部分展示的代码是先初始化mx=0,然后在初始化Date的时候又修改了他的值。
如果按照你所说的调换两行代码的顺序,就成了先初始化DAte,mx先为7,后又改为了0。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2