循环类初始化

时间:2017-11-13 00:10:18

标签: java class static initialization loading

在java中,在创建类的对象之前加载一个类。在程序的整个持续时间内只加载一次类。 发生这种情况时,将初始化静态并执行静态块。 这可以是循环的;在一个类完全初始化之前,我在类iteself中创建了一个类的对象。 例如:

public class MyTestClass{

public static MyTestClass myTest= new MyTestClass();

}  


public class Beginner{

public static void main(String[] args){
System.out.println(MyTestClass.myTest==null);
}
}

当我第一次在main()中调用MyTestClass.myTest时; MyTestClass将处于加载过程中,我尝试在加载MyTestClass时创建一个MyTestClass对象;应该不创建循环类加载,这可以是无限的? 如何在java中处理它?<​​/ p>

1 个答案:

答案 0 :(得分:1)

事件的顺序如下:

  1. 加载并验证类,所有静态成员都设置为null或0
  2. 执行类的静态初始化程序和块(按词汇顺序)
  3. 需要该课程的代码
  4. 在您的案例中执行初始值设定项包括

    public static MyTestClass myTest= new MyTestClass();
    

    这意味着main中的代码会看到MyTestClass.myTest非空。

    您唯一能够看到MyTestClass.myTest为null的时间是在静态初始值设定项中创建的MyTestClass实例的构造函数中。