静态代码块,代码块,构造函数的执行顺序

时间:2022-04-15 15:30:41

父级的静态代码块==》》子类的静态代码块==》》父类的非静态代码块==》》父类的无参构造函数==》》子类的非静态代码块==》》子类的无参构造函数。
上面是执行的先后顺序,因为静态代码块是在实列化一个对象的时候只会执行一次,
代码块是new一次对象加载一次。
子类的无参默认的是先调super();的无参构造函数。

父类:

public class ParentCodeDemo {
static {
System.out.println("我是父类静态代码块");
}
public ParentCodeDemo(){
System.out.println("我是父类的无参构造函数");
}
{
System.out.println("我是父类代码块");
}
}

子类

public class CodeDemo extends ParentCodeDemo{
static {
System.out.println("我是子类静态代码块");
}
public CodeDemo(){
System.out.println("我是子类无参构造函数");
}
public void hanshu(){
System.out.println("我是子类普通的方法");
}
{
System.out.println("我是子类代码块");
}
}
@Test
public void contextLoads() {
CodeDemo codeDemo=new CodeDemo();
codeDemo.hanshu();
}

输出结果:
我是父类静态代码块
我是子类静态代码块
我是父类代码块
我是父类的无参构造函数
我是子类代码块
我是子类无参构造函数
我是子类普通的方法