概念
静态初始化块:用来对类进行初始化(又称为类初始化)
初始化块:用来对对象进行初始化
构造器:创建一个对象时,调用的方法。可以进行初始化,默认有一个无参数构造器,但一旦自己写了有参数构造器后,系统就不会再提供默认的无参数构造器了。
执行顺序
先 静态初始化块 (并且只执行一次)当第一次使用到该类时,JVM加载该类,进行类初始化,一旦加载成功就永在JVM内存中,直到JVM退出。
再 初始化块
再 构造器
另外:初始化某个类时,总是先初始化该类的所有父类(包括直接父类和间接父类)。
1. 代码(参考《疯狂java》)
public class ConversionTest { 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 构造器 */ 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{ System.out.println("Leaf 静态初始化块"); } //初始化块 { System.out.println("Leaf 普通初始化块"); } //构造器 public Leaf(){ System.out.println("Leaf 构造器"); } }
************