在java中,类的初始化顺序是这样的:
首先,初始化的是静态初始化块
然后,初始化的是普通初始化块
最后,初始化构造器和普通成员变量
如下实例:
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的静态初始化块");}
public Mid()
{System.out.println("Mid的无参数构造器");}
{System.out.println("Mid的普通初始化块");}
}
class Leaf extends Mid
{
static{System.out.println("Leaf的静态初始化块");}
public Leaf()
{System.out.println("Leaf的无参数构造器");}//普通初始化块比构造器先初始化
{System.out.println("Leaf的普通初始化块");}
}
public class Test
{
public static void main(String[] args)
{
new Leaf();
new Leaf();
}
}
结果:
Root的静态初始化块
Mid的静态初始化块
Leaf的静态初始化块
Root的普通初始化块
Root的无参数构造器
Mid的普通初始化块
Mid的无参数构造器
Leaf的普通初始化块
Leaf的无参数构造器
Root的普通初始化块
Root的无参数构造器
Mid的普通初始化块
Mid的无参数构造器
Leaf的普通初始化块
Leaf的无参数构造器