public class Main {
static final int alex=getc();
static final int alex1=Integer.parseInt("10");
static final int alex2=getc();
public static int getc(){
return alex1;
}
public static void main(String[] args) {
final Main m = new Main();
System.out.println(alex+" "+alex1 +" "+alex2);
}
}
有人可以告訴我爲什麼這樣打印:0 10 10
?我知道它是一個靜態的最終變量,它的值不應該改變,但它有點難以理解編譯器如何初始化這些字段。初始化Java中的靜態最終字段
這是一個面試問題不是一個真正的問題,我試圖理解爲什麼編譯器分配0只是因爲alex1字段還沒有initlialized呢??因爲alex1是最終的,而alex代替alex1 = >> alex1是0? – Alexx 2011-05-13 09:02:20
靜態分配與成員變量不同,並且沒有這種保證。評估每個靜態分配,以便類加載器找到它。所以,就你而言,它首先通過調用getc()來指定alex。此時,alex1還沒有初始化,所以返回0。 – stevevls 2011-05-13 09:10:00
好吧,thx.另一個問題..如果它是在靜態塊中初始化的alex1字段,值爲10,其他人打印什麼?哪一個先執行?靜態塊還是初始化? – Alexx 2011-05-13 09:12:07