当子类生成构造方法的时候,执行的顺序

2019-04-11  本文已影响0人  最困惑的时候就是能成长的时候

分别是父类的静态代码块,父类的非静态代码块,父类的对象,父类的构造方法。然后在子类中一样也有这四块

Father 类:

public class Father {
    Dog dog = new Dog("父类的对象");  //父类对象
    //静态代码块
    static{
        System.out.println("父类静态代码块");
    }
    //非静态代码块
    {
        System.out.println("父类非静态代码块");
    }
    //父类构造方法构造方法
    public Father(){
        System.out.println("父类构造方法构造方法");
    }
}

Son类:

public class Son extends Father {
    Dog dog = new Dog("子类的对象");
    static{
        System.out.println("子类的静态代码块");
    }
    {
        System.out.println("子类的非静态代码块");
    }
    public Son() {
        System.out.println("子类的构造器");
    }

}

然后,我们执行Son的构造方法

new Son();

image.png

所以先执行父类静态代码块,然后执行子类的静态代码块,然后执行父类的对象构造,执行父类的非静态代码块,执行父类构造方法,然后执行子类的对象,执行子类的非静态代码块,执行子类的构造器

总结:
1.先执行父类的静态代码块,
2.子类的静态代码块
3.父类的对象(已经初始化的引用类型)和非静态代码块(谁在前先执行谁)
4.父类的构造方法
5.子类的对象和非静态代码块
6.子类的构造方法

上一篇下一篇

猜你喜欢

热点阅读