似乎很直观地清楚,在Java中,instance variable intitializers按照它们在类声明中出现的顺序执行。
我正在使用的JDK中肯定会出现这种情况。例如,以下内容:
public class Clazz {
int x = 42;
int y = this.z;
int z = this.x;
void print() {
System.out.printf("%d %d %d\n", x, y, z);
}
public static void main(String[] args) {
new Clazz().print();
}
}
打印42 0 42
(换句话说,y
获取默认值z
)。
这个订单真的有保证吗?我一直在查看JLS,但找不到任何明确的确认。
答案 0 :(得分:6)
是的,是的。
se7 JLS涵盖了12.5 Execution部分中的实例变量初始化顺序:
...
4.为此类执行实例初始值设定项和实例变量初始值设定项,分配实例变量的值 初始化器到相应的实例变量中 从左到右的顺序,它们在源代码中以文本形式出现 为了上课。如果执行任何这些初始化程序导致 异常,然后没有处理进一步的初始化程序 程序突然完成同样的异常。除此以外, 继续步骤5.
...
the JLS for Java 5在“课程”部分提到:
执行静态初始值设定项和类变量初始值设定项 以文字顺序。
答案 1 :(得分:0)
是的,类中的变量初始化以相同的顺序执行。因此,在第二行中,y采用z的默认值o,因为z未初始化