大家看看下面会打印什么:
为了让大家不看到答案 , 最后再给出答案 , 我先解释下 , static初始化块和类变量是按照其在代码中出现的顺序依次执行初始化操作的而不能在类变量声明出现之前就引用它 , 这些语句被处理的顺序就是它们在代码中出现的顺序 , 由于在初始化second 之前accessTooSoon 方法就访问了它那么方法得到的是second 的默认值即0 , 因此输出结果first 的值为0 而不是1 .
static int first = accessTooSoon();
static int second = 1;
static int accessTooSoon() {
return (second);
}
public static void main(String[] args) {
System.out.println("first = " + first);
}
为了让大家不看到答案 , 最后再给出答案 , 我先解释下 , static初始化块和类变量是按照其在代码中出现的顺序依次执行初始化操作的而不能在类变量声明出现之前就引用它 , 这些语句被处理的顺序就是它们在代码中出现的顺序 , 由于在初始化second 之前accessTooSoon 方法就访问了它那么方法得到的是second 的默认值即0 , 因此输出结果first 的值为0 而不是1 .