誰能解釋發生了什麼?靜態塊沒有被調用
public class MagicFinal {
public static void main(String[] args) {
System.out.println(A.s);
}
}
class A {
static {
System.out.println("class has been loaded");
}
public static final String s = "final";
public static final Integer i = 3;
}
控制檯:
最終
它是什麼?我不明白爲什麼這個類沒有被加載,我知道類在第一次調用時總是加載。字段s
在字符串池中,我看到最終修飾符是魔術。
如果我刪除final修飾符(public static String s = "final"
)我會得到
控制檯:
類已經加載
最終
注:我已經改變了場i
:public static final int i = 3;
並在conso中顯示樂。 我得到了一樣的字符串情況。爲什麼?
好的,非常感謝!怎麼樣int? public static final int i = 3; //不會寫類已經加載 public static final Integer i = 3; //寫入類已加載 – idmitriev
請閱讀我在答案中鏈接到的編譯時常量表達式的定義。 'int'是一個原始值,'String'是引用類型值的唯一特例,它可以包含在常量表達式中,而'Integer'既不是。 –
@marko - 你告訴我,A類沒有被裝入嗎?或者它是懶惰初始化的情況? – TheLostMind