我有两个不同的文件两班,每一个都有一个静态变量,我想知道是否有预测哪些人会首先初始化的方式(是实现相关的)? 我的代码看起来是这样的?
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();
}
这取决于当第一次使用每个类上。
从Java语言规范的第12.4.1 :
类或接口类型T将紧接在以下中的任何一个的第一次出现之前被初始化:
静态字段(§8.3.1.1)的引用仅引起类或实际声明它接口的初始化阶段,即使它可能是通过一个子类,子接口,或实现接口的类的名字被提及。
12.4.2节的JLS的指定详细的初始化程序。
说实话,如果你的代码需要一个人在另一个之前,尽管有没有明显的相关性进行初始化,然后你有问题,反正。
根据你的榜样 - 没有办法了Aa前初始化了Bb因为B级的访问将首先调用它的晚饭类的静态初始化。
如果你真的需要B之前做的一个逻辑 - 尝试封装它的静态方法:
public class A
{
public static boolean a;
public static init() {
a = log();
}
}
public class B
{
public static boolean b;
public static init() {
b = log();
}
}
public class Main
{
public static void main(String[] args) {
B.init();
A.init();
}
}
JVM没有跟上它的所有类,但是当请求类或类的静态成员,它加载从内存类的记录。 所以这之后的实际过程是这样的:
当类请求第一次:
所有静态变量
静态块(由顺序,第一个第一然后第二等)
实例变量(会员)
初始化器块(由顺序)
构造函数
而第二或算账:
所有的实例变量(会员)
初始化语句块(由令)
构造函数。
我希望这能帮到您。
谢谢...
Mr.777