我对以下代码段几乎没有疑问:
public class Configuration
{
public static String TEMP_DIR;
public static List<String> LEvents;
......//some more public static members......
static{
//logic to fill all the members of this class
}
}
答案 0 :(得分:2)
static {
//logic to fill all the members of this class
}
代码称为static initializer。
我想知道何时会执行填充成员的逻辑?
Java语言规范说
在class is initialized (§12.4.2)中执行类中声明的静态初始值设定项。
然后你问
如果我使用实际的静态,这种方法是不同的 执行逻辑并调用一次的方法?
使用静态初始化程序,JVM负责执行代码。使用static
方法,您必须自己调用它。为了使它等效,你可能还想保证只调用/执行一次方法。
答案 1 :(得分:0)
当ClassLoader加载类时,静态块中的代码将只执行一次。 ClassLoader将在语句执行时加载它,引用该类。
如果您编写了一个静态方法并调用了一次,那么它将具有相同的效果但您必须担心并发访问该方法,并且您需要手动确保该方法只执行一次。