本帖最后由 陈军 于 2012-11-21 08:26 编辑
package basic.program.test;
class Single {
private static Single obj = new Single(); //优先下面2个字段存在
public static int counter1;
public static int counter2 = 0;
private Single() {
counter1++;
counter2++;
}
public static Single getInstance() {
return obj;
}
}
//测试类
public class TestAdd {
public static void main(String[] args) {
Single obj = Single.getInstance();
System.out.println("obj.counter1==" + obj.counter1);
System.out.println("obj.counter2==" + obj.counter2);
}
}
运行结果:
obj.counter1==1
obj.counter2==0
分析: 因为static成员随着类的加载而加载。但是静态属性初始化顺序和声明顺序一样的。
所以当初始化对象obj时。
此时counter1和counter2都默认等于0,在构造函数中值变成1,然后再进行
赋值操作,此时counter2又变0,但是counter1没有变化。所以才有此结果。
|