请写出下列代码的输出结果
public class InitializeDemo {
private static int k = 1;
private static InitializeDemo t1 = new InitializeDemo("t1");
private static InitializeDemo t2 = new InitializeDemo("t2");
private static int i = print("i");
private static int n = 99;
static {
print("静态块");
}
private int j = print("j"); {
print("构造块");
}
public InitializeDemo(String str) {
System.out.println((k++) + ":" + str + " i=" + i + " n=" + n);
++i;
++n;
}
public static int print(String str) {
System.out.println((k++) + ":" + str + " i=" + i + " n=" + n);
++n;
return ++i;
}
public static void main(String args[]) {
new InitializeDemo("init");
}
}
- 首先初始化静态变量,k、i、n全部为0,然后顺序执行语句 k=1,执行了
- 然后初始化t1,此时n、i均为0,所以初始化t1的成员变量j;输出 1:j i=0 n=0 2:构造块 i=1 n=1
- 再初始化t1的构造方法:3:t1 i=2 n=2
- 然后初始化t2
- 先初始化t2的成员j变量输出 4:j i=2 n=2 5:构造块 i=3 n=3
- 再初始化t2的构造方法:6:i i=5 n=5
- 执行i=print(i);输出:7:i i=6 n=6
- 再执行n=99
- 执行静态块:输出 8:静态块 i=7 n=99
- 最后初始化init的成员变量:9:j i =8 n=100 10:构造块 i=9 n=101
- 初始化init的构造方法:11:init i=10 n=102
所以输出结果为:
1:j i=0 n=0
2:构造块 i=1 n=1
3:t1 i=2 n=2
4:j i=3 n=3
5:构造块 i=4 n=4
6:t2 i=5 n=5
7:i i=6 n=6
8:静态块 i=7 n=99
9:j i=8 n=100
10:构造块 i=9 n=101
11:init i=10 n=102