java - 静态赋值调用该方法两次

标签 java static

嗯...我无法为这个问题想出更好的标题

我无法理解为什么调用静态方法并将其值分配给另一个静态成员会调用方法 getValue() 两次。

如果我将静态赋值移到 main 方法之后,它不会加载两次。 我知道这很愚蠢,但我是否遗漏了一些明显的东西?

public class Test {
    private static Integer value1 = getValue(); // This is causing to load again

    private static Integer flag = null;

    public static Integer getValue() {
        if (flag != null) { // if flag is loaded already, return it.
            return flag;
        }

        System.out.println("Loading value...");

        flag = Integer.valueOf(10);

        return flag;
    }

    public static void main(String[] args) {
        getValue();
    }

    private static Integer value2 = getValue(); // This will not cause to load again
}

输出:

Loading value...
Loading value...

在线测试:https://ideone.com/pgRbff

最佳答案

让我们逐步了解一些关键行。

这一行:

private static Integer value1 = getValue();

打印“正在加载值...”并将flag设置为非空值。

然后这一行:

private static Integer flag = null;

标志设置回null

然后这一行:

private static Integer value2 = getValue();

再次打印“正在加载值...”并再次将flag设置为非空值。

然后 main 运行,这一行:

getValue();

不打印任何内容,因为 flag 设置为非空值。

关于java - 静态赋值调用该方法两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40200503/

相关文章:

调用非静态方法的Java静态引用变量

c++ - UPX 是否神奇地将二进制文件从动态链接转换为静态链接库?

c# - C# 中的静态成员继承,最好的方法是什么?

java - 将 add_jar 与 Swig 生成的 Java 绑定(bind)一起使用的正确方法是什么?

java - ORA-01461/BLOB/hibernate

java - 比较两个字符串数组而不知道哪一个包含更多值

java - 将任意类型分配给变量

java - 按 DESC 计数并列出列表排序计数中的出现次数

static - 在页面之间共享数据的最佳实践

c++ - 静态变量/双端队列和对象