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的无参构造器