Java类初始化加载过程

联动:为什么构造代码块先于构造函数执行?

梳理一下Java中类的加载顺序~

//父类
public class Father {

    static {
        System.out.println("父类静态代码块...");
    }

    {
        System.out.println("父类构造代码块...");
    }

    public Father() {
        System.out.println("父类构造函数...");
    }

    public void run() {
        System.out.println("父类方法...");
    }

}

//子类
public class Son extends Father {

    public static int a = 1;

    static {
        a = 2;
        System.out.println("子类静态代码块...");
    }

    public String name;

    public Son(String name) {
        System.out.println("子类构造函数...");
        this.name = name;
    }

    {
        a = 3;
        System.out.println("子类构造代码块...");
    }

    @Override
    public void run() {
        System.out.println("子类复写父类方法: " + a);
    }

    public static void main(String[] args) {
        Father father = new Son("java boy");
        father.run();
        new Son("java boy");
    }

}

打印结果:

父类静态代码块...
子类静态代码块...
父类构造代码块...
父类构造函数...
子类构造代码块...
子类构造函数...
子类复写父类方法: 3
父类构造代码块...
父类构造函数...
子类构造代码块...
子类构造函数...

结论:

1. 父类先于子类进行初始化;
2. 静态代码块随着类的加载而加载,且只执行一次;
3. 构造代码块先于构造函数执行,两者每new一次就执行一次;
4. 从以上3点可以得出执行顺序:父类静态代码块->子类静态代码块->父类构造代码块->父类构造函数->子类构造代码块->子类构造函数。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,020评论 25 708
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,746评论 18 399
  • 作者:成 富, 软件工程师, IBM 中国软件开发中心 类加载器(class loader)是 Java™中的一个...
    Android技术研究阅读 3,911评论 0 74
  • 有网友建议我先说宝钗,这不为难木夫我吗? 宝玉,黛玉,宝钗三个人物在《红楼梦》书中都是动态人物。 宝黛同体很好理解...
    木夫009阅读 418评论 8 4
  • 1. 记笔记是为了心里安慰。记下了,也不知道是什么意思。还有的人连笔记都不会记。正如,有的人的思考和逻辑已经相当好...
    葭州寒雪阅读 145评论 0 0