NPE*_*NPE 10 java initialization undefined-behavior
在研究另一个问题时,我惊讶地发现以下Java代码编译时没有错误:
public class Clazz {
int var = this.var + 1;
}
Run Code Online (Sandbox Code Playgroud)
在我的JDK6中,var初始化为1.
上面的代码是否具有明确定义的语义,或者它的行为是否未定义?如果您说它定义明确,请引用JLS的相关部分.
在第 8.3.2.3 节的示例 8.3.2.3-1 中顺便提到了。在文中的例子中
\n\nclass Z {\n static int peek() { return j; }\n static int i = peek();\n static int j = 1;\n}\nclass Test {\n public static void main(String[] args) {\n System.out.println(Z.i);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n标题说:
\n\n\n\n\n... i 的变量初始值设定项使用类方法 peek 在 j 由其变量初始值设定项初始化之前访问变量 j 的值,此时它仍具有默认值 (\xc2\xa74.12.5)。
\n
这应该直接反映您的情况。
\n| 归档时间: |
|
| 查看次数: |
169 次 |
| 最近记录: |