top*_*ard 13 java circular-dependency
对于以下代码:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
输出为:X = 1,Y = 2
为什么?如何???
-Ivar
PS:来自JavaCamp.org的代码片段
aio*_*obe 22
以下是按时间顺序发生的事情:
类B包含main方法,因此它由类加载器加载.
初始化B引用A,因此A加载了类.
A有一个X初始化为的静态变量B.Y + 1.
初始化B.Y尚未执行,因此B.Y计算结果为0,因此分配了1A.X
现在A已经完成加载,并且B.Y可以进行初始化.
A.X + 1(1 + 1)的值被分配给B.Y.
的值A.X和B.Y被打印为1和2分别.