java类各部分初始化顺序

2022-09-14  本文已影响0人  zhengaoly

参考文章
原文

package libtest;

class Person {
    static {
        System.out.println("我是Person类的静态初始化块");
    }
     {
        System.out.println("我是Person类的普通初始化块");
    }
     public Person() {
         System.out.println("我是Person类的无参构造器");
     }
}
class Police extends Person{
    static {
        System.out.println("我是Police类的静态初始化块");
    }
    {
        System.out.println("我是Police类的普通初始化块");
    }
     public Police() {
         System.out.println("我是Police类的无参构造器");
     }
     public Police(int a) {
         //调用自己的无参构造器
         this();
         System.out.println("我是Police类的有参构造器,参数为:"+a);
     }
}
class SWAT extends Police{
    static {
        System.out.println("我是SWAT的静态初始化块");
    }
    {
        System.out.println("我是SWAT的普通初始化块");
    }
    public SWAT() {
        //调用直接父类的有参构造器
        super(10);
        System.out.println("我是SWAT的无参构造器");
    }
}
public class Demo01 { 
    public static void main(String[] args) {
        new SWAT();
    }
}

结果:

我是Person类的静态初始化块
我是Police类的静态初始化块
我是SWAT的静态初始化块
我是Person类的普通初始化块
我是Person类的无参构造器
我是Police类的普通初始化块
我是Police类的无参构造器
我是Police类的有参构造器,参数为:10
我是SWAT的普通初始化块
我是SWAT的无参构造器
上一篇下一篇

猜你喜欢

热点阅读