public class DemoApplication {
public static void main(String[] args) {
System.out.println("count: "+A.count);
System.out.println("count: "+A.count);
var a1=new A();
var a2=new A();
System.out.println("count: "+A.count);
}
}
1)
public class A {
public static A inst = new A();
public static int count;
public A() {
A.inst.count++;
}
}
输出:
count: 1
count: 1
count: 3
2)
public class A {
public static A inst = new A();
public static int count=0;
public A() {
A.inst.count++;
}
}
输出:
count: 0
count: 0
count: 2
差异在于
谁能解释一下吗?
静态初始化按顺序发生。
在第一个代码片段中,第一个操作是为静态字段创建
A
的新实例。它需要静态字段,以便初始化为默认值 0。然后构造函数将其增加到 1。
在第二个代码片段中,静态字段初始化后,值 (1) 重置回 0。