请大家解释下怎么执行的,不是要答案,而是要知道怎么得到答案的。
题目如下:
class A{
public static int X; static{
X = Test.Y + 1;
}
}public class Test{
public static int Y = A.X + 1; static{
Y++;
} public static void main(String[] args){
System.out.println(A.X);
System.out.println(Test.Y);
}
}
题目如下:
class A{
public static int X; static{
X = Test.Y + 1;
}
}public class Test{
public static int Y = A.X + 1; static{
Y++;
} public static void main(String[] args){
System.out.println(A.X);
System.out.println(Test.Y);
}
}
1、整形在未赋值的时候,数值为0
2、用到一个类的时候是先对其静态变量初始化,然后调用他的静态构造函数
3、类的静态构造函数只在加载类的时候由系统调用一次且只此一次那么,
1、打印A.X时,A.X和Test.Y都为0,于是X=Test.Y+1,输出1
2、打印Test.Y时,A.X=1,Y=A.X+1=2,Y++=3,输出为3
所以jvm要先加载Test
默认情况下要把静态的变量和静态块加载进来
加载public static int Y = A.X + 1;
用到了A,所以加载A
执行X = Test.Y + 1;
此时Test.Y是0 所以x=1;
程序回到public static int Y = A.X + 1;
Y=2;
Y++;
Y=3;
结束。