Java中的静态循环依赖
问题内容:
对于以下代码:
class A
{
public static int X;
static { X = B.Y + 1;}
}
public class B
{
public static int Y = A.X + 1;
static {}
public static void main(String[] args) {
System.out.println("X = "+A.X+", Y = "+B.Y);
}
}
输出为:X = 1,Y = 2
为什么?如何???
-伊瓦尔
PS:摘自JavaCamp.org的代码段
问题答案:
以下是按时间顺序发生的情况:
-
类
B
包含主方法,因此它由类加载器加载。 -
B
引用的初始化A
,因此类A
被加载。 -
A
有一个X
初始化为的静态变量B.Y + 1
。
的初始化B.Y
尚未执行,因此B.Y
求值为0,因此将1分配给A.X
- 现在
A
已经完成加载,并且B.Y
可以初始化。
值A.X + 1
(1 +1)被分配给B.Y
。
- 的值
A.X
和B.Y
被打印为1
和2
分别。