我在两个不同的文件中有两个类,每个文件都有一个静态变量,我想知道是否有一种方法可以预测哪一个将首先被初始化(是否依赖于实现)?我的代码看起来像这样?
File1:
public class A
{
public static boolean a = Logger.log();
}
File2:
public class B
{
public static boolean b = Logger.log();
}
File3:
public class Logger
{
public static boolean log();
}
Run Code Online (Sandbox Code Playgroud)
这取决于每个班级何时首次使用.
类或接口类型T将在第一次出现以下任何一个之前立即初始化:
T是一个类,并且创建了T的实例.
T是一个类,并且调用由T声明的静态方法.
分配由T声明的静态字段.
使用由T声明的静态字段,该字段不是常量变量(第4.12.4节).
T是顶级类(第7.6节),并且执行在词典内嵌套在T(第8.1.3节)内的断言语句(第14.10节).
对静态字段(第8.3.1.1节)的引用仅导致实际声明它的类或接口的初始化,即使它可能通过子类的名称,子接口或实现接口的类来引用.
JLS的第12.4.2节详细说明了初始化过程.
说实话,如果你的代码要求一个在另一个之前初始化,尽管没有明显的依赖性,那么你无论如何都会遇到问题.