java类没有任何方法,但包含静态关键字下的逻辑

时间:2014-04-04 22:33:54

标签: java

我对以下代码段几乎没有疑问:

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
    }
}
  1. 我想知道何时会执行填充成员的逻辑?
  2. 如果我使用实际的静态方法来执行逻辑并调用它一次,那么这种方法会有所不同吗?

2 个答案:

答案 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将在语句执行时加载它,引用该类。

如果您编写了一个静态方法并调用了一次,那么它将具有相同的效果您必须担心并发访问该方法,并且您需要手动确保该方法只执行一次。