什么是类的初始化?它是如何工作的?代码举例讲解

类的初始化是Java虚拟机在加载类和创建类的实例对象或调用类的静态方法时,对类进行准备工作的过程。
它主要包括:

  1. 给静态变量赋初始值。
  2. 执行静态代码块。
  3. 创建类的父类与成员。

类的初始化触发时机有:

  1. 创建类的实例:new一个类的对象时。
  2. 访问类的静态变量或静态方法:第一次读取或设置静态字段的运算符,或调用静态方法时。
  3. 使用反射方式强制创建某个类或接口对应的java.lang.Class对象时。
  4. 初始化一个类时,其父类和成员会先初始化。
  5. 只初始化一次:一个类的()方法只会被执行一次。

类的初始化遵循以下规则:

  1. 父类的()先执行。
  2. 成员变量和成员方法按定义顺序执行。
  3. 父类构造器会在子类构造器执行之前调用。

来看一个简单例子:

public class InitializationDemo {
    static {
        System.out.println("主类初始化");
    }

    public static void main(String[] args) {
        Son s = new Son();
    }
}

class Father {
    static {
        System.out.println("父类初始化");
    }
} 

class Son extends Father {
    static {
        System.out.println("子类初始化");
    }

    public Son() {
        System.out.println("构造方法");
    }
}

该程序执行main方法时,会按以下顺序初始化各个类:

  1. 父类Father初始化,输出”父类初始化”。
  2. 子类Son初始化,输出”子类初始化”。
  3. 主类InitializationDemo初始化,输出”主类初始化”。
  4. 创建Son的实例,输出”构造方法”。