java - 以静态方式创建对象

标签 java static

谁能解释一下 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/

相关文章:

c# - 如何在另一个命名空间的静态类中将 Listview 绑定(bind)到 Observablecollection

java - 仅匹配命名空间中的 XML 节点,而不知道 NS 前缀

Java新手不会做简单的数学运算,运算符错误

java - google eclipse插件创建的log4j.properties和logging.properties有什么区别?

Django:在测试期间从 STATIC_ROOT 读取

c#:(静态)类级变量

jquery - 单击链接时保持屏幕静态

java - 这是在 java 中执行以下任务的最佳方法

java - 有没有办法将父类(super class) obj 更改为子类 obj?

java - 扩展 spring 的配置以保存自定义 xml 设置