一、执行先后顺序: 静态>动态>构造
public class dongwu{
private String name;
dongwu(String name){
this.name = name;
System.out.println("我是 "+name);
System.out.println("我是动物构造");
}
//**********************************************
{
System.out.println("动物动态");
}
//**********************************************
static {
System.out.println("我是动物静态");
}
}
class Dog extends dongwu{
static
{
System.out.println("我是狗静态");
}
//**********************************************
Dog(){
super("DOG");
System.out.println("我是狗构造");
}
//**********************************************
{
System.out.println("我是狗动态态");
}
}
二、执行结果:
- 我是动物静态
- 我是狗静态
- 动物动态
- 我是 DOG //用子类调用父类构造 super(DOG)
- 我是动物构造
- 我是狗动态态
- 我是狗构造
三、总结:
- 先执行静态代码块。先执行父类静态,然后依次为儿子静态,孙子静态...........
- 再执行动态代码块接着执行构造代码块,遵循先父类动态及构造,再儿子动态及构造,孙子动态及构造.........