JVM加载class文件的顺序

Posted daidao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM加载class文件的顺序相关的知识,希望对你有一定的参考价值。

http://blog.csdn.net/jackfrued/article/details/44921941第21题

类的加载是指把类的.class文件中的数据读入到内存中,通常是创建一个字节数组读入.class文件,然后产生与所加载类对应的Class对象。加载完成后,Class对象还不完整,所以此时的类还不可用。当类被加载后就进入连接阶段,这一阶段包括验证、准备(为静态变量分配内存并设置默认的初始值)和解析(将符号引用替换为直接引用)三个步骤。最后JVM对类进行初始化,包括:

1)如果类存在直接的父类并且这个类还没有被初始化,那么就先初始化父类;

2)如果类中存在初始化语句,就依次执行这些初始化语句。 

技术分享图片
class A {

    static {
        System.out.print("1");
    }

    public A() {
        System.out.print("2");
    }
}

class B extends A{

    static {
        System.out.print("a");
    }

    public B() {
        System.out.print("b");
    }
}

public class Hello {

    public static void main(String[] args) {
        A ab = new B();
        ab = new B();
    }

}
View Code

执行结果:1a2b2b。创建对象时构造器的调用顺序是:先初始化静态成员,然后调用父类构造器,再初始化非静态成员,最后调用自身构造器。

以上是关于JVM加载class文件的顺序的主要内容,如果未能解决你的问题,请参考以下文章

类加载Class Loading

从JVM的角度看JAVA代码--代码优化

JVM系列之类加载

JVM加载class文件的原理机制

jvm类加载

JVM之类加载