谁能解释一下 Java 是如何执行这段代码的?我的意思是执行每个语句的顺序。
public class Foo
{
boolean flag = sFlag;
static Foo foo = new Foo();
static boolean sFlag = true;
public static void main(String[] args)
{
System.out.println(foo.flag);
}
}
输出:
false
最佳答案
- 类初始化开始。最初,
foo
为 null,sFlag
为 false - 第一个静态变量初始化器 (
foo
) 运行:Foo
的新实例已创建flag
的实例变量初始化器执行——当前sFlag
为false,所以flag
的值为false
- 第二个静态变量初始化器 (
sFlag
) 执行,将值设置为 true - 类初始化完成
main
运行,打印出foo.flag
,这是错误的
请注意,如果 sFlag
被声明为 final
,它将被视为 编译时常量,此时所有对它基本上会被内联到 true
,所以 foo.flag
也是如此。
关于java - 以静态方式创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10613853/