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