如何解决编译后静态块结构发生变化
我要在静态块之后声明一个静态变量。当我调用一个方法以打印其值时,结果为0。我对.class文件进行了反编译,发现静态块的结构已更改。谁能解释为什么?
class Testing {
static {
callMe();
System.out.println("Static finished");
}
static void callMe() {
System.out.println(x);
}
static int x = 10;
public static void main(String[] args) {
System.out.println("Complete");
}}
反编译代码:
class Testing {
static int x;
Testing() {
}
static void callMe() {
System.out.println(x);
}
public static void main(String[] args) {
System.out.println("Complete");
}
static {
callMe();
System.out.println("Static finished");
x = 10;
}}
解决方法
如果总体结果相同,则允许编译器对执行重新排序。
在您的情况下是这样,因为static
块和初始化程序是按声明的顺序执行 ,所以static int x = 10;
的内联分配是在执行之后 印刷品。
关于为什么,确切的编译器版本将代码重新排序的方式对编译器开发团队来说是个问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。