java学习-继承构造器、静态代码块、普通代码块的执行顺序

1、首先建立三个类

在这里插入图片描述

1.1 PPDemo.java
public class PPDemo {

    static{
        System.out.println("PPDemo static...");
    }

    {
        System.out.println("PPDemo ...");
    }

    public PPDemo() {
        System.out.println("PPDemo()....");
    }
}
1.2 PDemo.java
public class PDemo extends PPDemo {
    static {
        System.out.println("PDemo static...");
    }

    {
        System.out.println("PDemo...");
    }
    PDemo(){
        System.out.println("PDemo() ...");
    }
}
1.3 CDemo.java
public class CDemo extends PDemo {
    static {
        System.out.println("CDemo static ....");
    }
    {
        System.out.println("CDemo ....");
    }

    public CDemo(){
        System.out.println(" CDemo() ...");
    }
}

2、测试

public class ExtendsDemo {

    public static void main(String[] args){

        CDemo cDemo=new CDemo();
    }
}

结果:

PPDemo static...
PDemo static...
CDemo static ....
PPDemo ...
PPDemo()....
PDemo...
PDemo() ...
CDemo ....
CDemo() ...

结论:

1、静态代码块的最先执行,父类的静态代码块优先于子类执行
2、普通代码块的执行顺序优先于构造方法
3、子类的普通代码块执行顺序低于父类构造方法
4、子类的静态代码块执行顺序高于父类的普通代码快和,构造方法

执行顺序图解

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/shan_zhi_jun/article/details/83147045
今日推荐