我正在学习SCJP考试,在做了一些模拟测试后我遇到了这个:
它询问以下内容的输出:
class TestClass
{
int i = getInt();
int k = 20;
public int getInt() { return k+1; }
public static void main(String[] args)
{
TestClass t = new TestClass();
System.out.println(t.i+" "+t.k);
}
}
我认为它会是21 20
,因为t.i会调用getInt,然后将k增加到21。
然而,答案是1 20
。我不明白为什么它会是1,有人可以对此有所了解吗?
答案 0 :(得分:17)
变量从上到下初始化。
这就是:
i
和k
都有(默认)值0
。getInt()
计算的值(当时为0 + 1
)已分配给i
20
已分配到k
1 20
已打印。好读:
答案 1 :(得分:0)
jvm会像这样,
1.从上到下识别非静态成员 2.从上到下执行非静态变量和块 3.执行构造函数......
在第一步中,jvm将提供默认值..在readindirectly中的时间变量只写状态..