静态类何时初始化



考虑一个只有静态字段而没有构造函数的Java类:

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;
   }
}

在另一个类中,方法computestatic import:使用

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

或者直接,假设调用者在同一个包中:

int a = OnlyStatic.compute(3);

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

如果不将对象o1o2也设为static,则它们对static上下文不可用。

JVMS指出

类中声明的任何静态初始化程序都将在初始化时执行

进一步

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

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

因此,在您的情况下,当静态方法compute()首次执行时。

相关内容

  • 没有找到相关文章

最新更新