我有一段简单的Java代码:
class A {
static {
int x=3;
int y;
int yy=1234;
int yyy;y=1;int zy=x;
System.out.println("x: "+x);
}
}
我希望它能打印“x:1234”。
javac A.java && java A
x: 3
Exception in thread "main" java.lang.NoSuchMethodError: main
但它打印“x:3”。为什么?这是另一种我不知道的优化类型吗?我认为如果你有多个线程,volatile只会很重要吗?我尝试将所有变量设置为volatile,甚至将锁定放在它们周围,但没有运气。有人告诉我,我应该在课堂上设置strictfp,但也没有运气。
答案 0 :(得分:7)
你有让人显得怪异的角色。 实际代码:
1 class A {
2 static {
3 int x=3;
4 int y<202d>;
5 int yy=1234;
6 int yyy<202e>;y<202d>=1;int z<202e>y=x;
7 System.out.println("x: "+x);
8 }
9 }
&LT; 202E&GT;被称为“从右到左覆盖”
&LT; 202D&GT;是“从左到右覆盖”