public class Test1 {public static int k = 0;public static Test1 t1 = new Test1("t1");public static Test1 t2 = new Test1("t2");public static int i = print("i");public static int n = 99;public int j = print("j");{print("构造块");}static{print("静态块");}public Test1(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) {Test1 t = new Test1("init");}}//请高手解释一下输出结果为啥是那些,为啥第一行输出的时候n=0呢
2 回答
回首忆惘然
TA贡献1847条经验 获得超11个赞
静态属性->静态快->静态方法->构造快->普通属性->普通方法。这里第一次加载按着顺序加载属性,类开始初始化 但是因为其他静态的属性都只初始化一次 现在没有初始化 所以没有识别到,成员属性却被加载到了,然后加载构造快,静态属性加载一次就不再加载,但是成员变量却每次构造的时候都加载,一步步下来你自己就清楚了。n第一次根本没有加载到了,只能按着默认赋值了。真正的按着顺序加载到那个位置的时候 n才真的被赋值了。
慕桂英3389331
TA贡献2036条经验 获得超8个赞
对了 这个你自己可以写个例子自己调试看,这个也是我自己写例子查看出来,你可以自己先按着自己明白的加载顺序写,然后再加入不明白的那些加载属性 和方法。
添加回答
举报
0/150
提交
取消