NPE*_*NPE 9 java initialization
直观地说,在Java中,实例变量初始化器按它们在类声明中出现的顺序执行.
这肯定是我正在使用的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();
}
}
Run Code Online (Sandbox Code Playgroud)
打印42 0 42(换句话说,y选择默认值z).
这个订单真的有保证吗?我一直在查看JLS,但找不到任何明确的确认.
是的.
se7 JLS涵盖12.5执行部分中的实例变量初始化顺序:
...
4.执行此类的实例初始值设定项和实例变量初始值设定项,将实例变量初始值设定项的值分配给相应的实例变量,按从左到右的顺序,它们以文本方式出现在类的源代码中.如果执行任何这些初始值设定项导致异常,则不会处理其他初始化程序,并且此过程会突然完成同样的异常.否则,继续步骤5.
...
JLS for Java 5在"类"部分中提到:
静态初始值设定项和类变量初始值设定项以文本顺序执行.
| 归档时间: |
|
| 查看次数: |
188 次 |
| 最近记录: |