父级的静态代码块==》》子类的静态代码块==》》父类的非静态代码块==》》父类的无参构造函数==》》子类的非静态代码块==》》子类的无参构造函数。
上面是执行的先后顺序,因为静态代码块是在实列化一个对象的时候只会执行一次,
代码块是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();
}
输出结果:
我是父类静态代码块
我是子类静态代码块
我是父类代码块
我是父类的无参构造函数
我是子类代码块
我是子类无参构造函数
我是子类普通的方法