静态类何时初始化?

时间:2012-02-20 12:59:17

标签: java import initialization static-import

考虑一个Java class with static fields only而没有构造函数:

public class OnlyStatic {
   static O1 o1 = new o1();
   static O2 o2 = new o2();

   public static int compute(int whatever) {
       return o1.foo+o2.bar+whatever;
   }
}

在其他课程中,compute使用方法static import

static import OnlyStatic.compute
int a = OnlyStatic.compute(3);

或直接,假设呼叫者在同一个包中:

int a = OnlyStatic.compute(3);

o1和o2何时初始化?在导入时,还是第一次调用compute()时?

1 个答案:

答案 0 :(得分:5)

对象o1o2static上下文无法使用static时无法使用。

JVMS表示

  

在类初始化时执行类中声明的任何静态初始化器

Further

  

类或接口类型 T 将在第一次出现以下任何一个之前立即初始化:

     
      
  • T 是一个类,并且创建了 T 的实例。
  •   
  • T 是一个类,并且调用 T 声明的静态方法。
  •   
  • 分配 T 声明的静态字段。
  •   
  • 使用 T 声明的静态字段,该字段不是常量变量(§4.12.4)。
  •   
  • T 是顶级类,并且词法嵌套在 T 中的断言语句(§14.10)是   执行。
  •   

因此,在您的情况下,静态方法compute()首先执行