package javaTest;
public class Root {
static{
System.out.println("静态ROOT");
}
{
System.out.println("普通ROOT");
}
public Root(){
System.out.println("无参数构造器ROOT");
}
}
class Mid extends Root{
static{
System.out.println("静态Mid");
}
{
System.out.println("普通Mid");
}
public Mid(){
System.out.println("无参数构造器Mid");
}
public Mid(String msg){
this();
System.out.println("有参数构造器Mid"+msg);
}
}
class Leaf extends Mid{
static{
System.out.println("静态Leaf");
}
{
System.out.println("普通Leaf");
}
public Leaf(){
super("java");
System.out.println("无参数构造器Leaf");
}
}
public class Test {
public static void main(String[] args) {
new Leaf();
new Leaf();
}
}
执行结果:
静态ROOT
静态Mid
静态Leaf
普通ROOT
无参数构造器ROOT
普通Mid
无参数构造器Mid
有参数构造器Midjava
普通Leaf
无参数构造器Leaf
普通ROOT
无参数构造器ROOT
普通Mid
无参数构造器Mid
有参数构造器Midjava
普通Leaf
无参数构造器Leaf
分析:
1.每次创建一个Leaf对象的时候,
先静态,再无构造器,最后有构造器。静态的父类和子类先执行。
2.先父类再子类
3.两次创建Leaf实例,静态的会存在虚拟机内,故只需要执行一次。