这位老兄 对类的初始化讲的太好了, http://zangweiren.iteye.com/blog/208122
下面引用他的结论:
1)单个类内进行初始化时顺序
- 静态变量 & 静态初始化块
- 变量 & 初始化块
- 构造器
2)继承中类初始化时顺序
- 父类--静态变量 & 父类--静态初始化块
- 子类--静态变量 & 子类--静态初始化块
- 父类--变量 & 父类--初始化块
- 父类--构造器
- 子类--变量 & 子类--初始化块
- 子类--构造器
3)静态变量 vs 静态初始化块
静态变量和静态初始化块的优先级是相同的,依照他们在类中的定义顺序决定初始化的顺序,即谁先定义就先初始化谁。
4)变量 vs 初始化快
遵循和 3) 中同样的规则,即它们是相同优先级的,定义顺序决定初始化顺序,先定义的先初始化。
补充说明:
静态初始化块 是前面加了 static 关键字的 花括号,如 static {...}
初始化块 是花括号,如 {...}