码迷,mamicode.com
首页 > 其他好文 > 详细

JVM加载class文件的顺序

时间:2018-03-12 17:00:53      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:语句   print   void   ati   存在   .net   调用顺序   []   不可用   

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文件的顺序

标签:语句   print   void   ati   存在   .net   调用顺序   []   不可用   

原文地址:https://www.cnblogs.com/daidao/p/8549400.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!