gpt4 book ai didi

java - 在使用它们影响的数据之前,我是否必须确保在 Java 中手动加载类?

转载 作者:行者123 更新时间:2023-12-04 12:27:23 24 4
gpt4 key购买 nike

有点好奇的问题,当我用 Java 编写一个看起来像这样的程序时:

public class Basic {

public static HashMap<String,Integer> my_map = new HashMap<>();

public static void main(String[] a) {
mymap.forEach( (str,i) -> System.out.println(str+": "+i) );
}

}
本质上是一个保存和处理一些静态/全局数据的结构,然后说例如(为了代码清洁)我在不同文件中的不同类中的值将在初始化时将所有值加载到该主类中,如下所示:
public class Foo {
static final String a = def("APPLE");
static final String b = def("BUMBLEBEE");
static final String c = def("CARTOGRAPHER");

static String def (String s) {
Basic.my_map.put(s, new Random().nextInt(256));
return s;
}
}
现在为了让这段代码正确运行(即在程序启动时,Foo 中定义的所有值都被打印出来)我的直觉是在 Foo 内部定义一个空函数并在 main 的开始处调用它,
我基本上想知道这是否真的有必要。所有静态变量是否会在程序启动之前或至少在使用它们影响的任何代码之前被初始化。或者最好在与可能与之交互的数据进行交互之前手动确保已加载类。

最佳答案

一个类在访问时被加载,甚至只读取它的一个静态字段,然后它的所有静态字段都将被初始化(如果未分配则为 null)然后任何静态块都将运行。
因此,当您的“填充”类访问需要“填充”类的名称时,它会导致它加载。
在您的示例中,没有任何内容调用/引用“Foo”。假设您只运行 Basic 的 main 方法,那么它应该运行为空。

关于java - 在使用它们影响的数据之前,我是否必须确保在 Java 中手动加载类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69608423/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com