对于具有父子继承关系的初始化块和构造函数以及静态成员的加载顺序是如何的呢?
一个demo看穿一切:
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的构造函数");
}
}
class Leaf extends Mid{
static int a = 20;
static{
a = 10;
System.out.println("这是Leaf的静态初始化块");
}
{
System.out.println("这是Leaf的普通初始化块");
}
public Leaf(){
System.out.println("这是Leaf的构造函数");
System.out.println("a = "+a);
}
public static void main(String []args){
Leaf leaf = new Leaf();
}
}
总结一下就是:从上到下,一静到底,再上再下,先初始再构造。