虚拟机类加载机制【初始化】

2021-08-01  本文已影响0人  云芈山人

初始化时类加载的最后一个阶段,在之前的阶段里,除了用到用户自定义的类加载器时参与到其中之外,其余都是虚拟机主导的。直到初始化阶段,Java虚拟机才真正执行类中编写的Java程序代码,将主导权移交给应用程序。

进行准备阶段时,变量已被赋过系统要求的初始值,而在初始化时,才会根据程序员通过代码编码制定的主观计划去初始化类变量和其它资源。也可以说:初始化阶段就是执行类构造器<clinit>()方法的过程。<clinit>()并不是程序员在Java代码中直接编写的方法,它是Javac编译器的自动生成物,但对于它的产生以及方法执行过程中各种可能会影响程序运行行为的细节都有必要了解。

public class Test{
    static{
        i = 0;//给变量赋值可以正常通过
        System.out.print(i);//编译器会提示“非法前向引用”
    }
    static int i = 1;

}
public class SuperClass {
    
    public static int A = 1;
    static {
         A = 2;
    }
            
}
public class SubClass extends SuperClass {
    public static int B = A;
}
public class Test {
    
    public static void main(String[] args) {
        System.out.println(SubClass.A);//输出为2
    }
    
}

《深入理解Java虚拟机》学习笔记

上一篇 下一篇

猜你喜欢

热点阅读