淘先锋技术网

首页 1 2 3 4 5 6 7

在查看答案之前,先猜测一下正确答案吧!

package com.company;

class ParentClass {

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

    public ParentClass(String name) {
        System.out.println("父类有参构造代码块 " + name);
    }

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

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

}

public class SubClass extends ParentClass {
    public SubClass() {
        System.out.println("子类无参构造代码块 ");
    }

    public SubClass(String name) {
        System.out.println("子类有参构造代码块 " + name);
    }

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

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

    public static void main(String[] args) {
        System.out.println("-------main start-------");
        ParentClass subClass1 = new SubClass();
        System.out.println("---------------------");
        ParentClass subClass2 = new SubClass("李四");
        System.out.println("-------main end-------");
    }
}

答案的结果为:

父类静态代码块 
子类静态代码块
-------main start-------
父类构造代码块 
父类无参构造代码块 
子类构造代码块
子类无参构造代码块 
---------------------
父类构造代码块 
父类无参构造代码块 
子类构造代码块
子类有参构造代码块 李四
-------main end-------

总结一下三篇文章得出的顺序:

父类普通static块->子类普通static块->父类构造代码块->父类无参构造方法->子类构造代码块->子类构造方法