Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Java 代码块详解:父子类中的代码块执行顺序

/ JavaSE / 563浏览

上一篇文章中,进行了Java代码块的使用(点击查看),这里对代码块在父子类继承关系中,进一步研究一下代码块的执行顺序。

代码用例:
父类,定义了静态代码块,构造代码块,构造方法。

package cn.zealon.modifier.codeblock;

/**
 * 父类
 * @auther: Zealon
 */
public abstract class CodeBlock {
    static {
        System.out.println("执行abstract CodeBlock静态代码块.");
    }

    {
        System.out.println("执行abstract CodeBlock构造代码块.");
    }

    public CodeBlock(){
        System.out.println("执行abstract CodeBlock构造方法.");
    }
}

子类继承父类,同时也定义了静态代码块,构造代码块,构造方法。

package cn.zealon.modifier.codeblock;

/**
 * 子类继承父类代码块执行顺序的综合用例
 * @auther: Zealon
 */
public class UseCodeBlock4 extends CodeBlock {
    static {
        System.out.println("执行静态代码块.");
    }

    {
        System.out.println("执行构造代码块.");
    }

    public UseCodeBlock4(){
        System.out.println("执行构造方法.");
    }

    public static void main(String[] args){
        new UseCodeBlock4();
    }
}

运行子类main方法,来观察下结果:

执行abstract CodeBlock静态代码块.
执行静态代码块.
执行abstract CodeBlock构造代码块.
执行abstract CodeBlock构造方法.
执行构造代码块.
执行构造方法.

说明了,子类继承父类,在子类类对象被创建完成的时候,会先执行父类中的代码块、构造方法,再执行自己的代码块,构造方法。由于静态构造方法不需要创建对象就可以运行,所以最先运行的是静态构造代码块,然后才是构造代码块,最后执行构造方法。

⭐ 总结:所以在父子类中代码块的执行顺序为:
父类静态代码块 > 子类静态代码块 > 父类构造代码块 > 父类构造方法 > 子类构造代码块 > 子类构造方法