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呢
靜態屬性->靜態快->靜態方法->構造快->普通屬性->普通方法。這裡第一次加載按著順序加載屬性,類開始初始化 但是因為其他靜態的屬性都只初始化一次 現在沒有初始化 所以沒有識別到,成員屬性卻被加載到了,然後加載構造快,靜態屬性加載一次就不再加載,但是成員變量卻每次構造的時候都加載,一步步下來你自己就清楚了。n第一次根本沒有加載到了,只能按著默認賦值了。真正的按著順序加載到那個位置的時候 n才真的被賦值了。