程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 初始化順序-今年阿裡巴巴的一道筆試題

初始化順序-今年阿裡巴巴的一道筆試題

編輯:編程綜合問答
今年阿裡巴巴的一道筆試題

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才真的被賦值了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved