2020-02-01Java程序的初始化顺序

初始化顺序:

  • 对于一个单独的类而言:

    • 静态部分(静态成员变量 + 静态代码块):按照定义顺序进行初始化
    • 普通成员(普通成员变量 + 普通代码块):按照定义顺序进行初始化
    • 构造函数

  • 对于有父类而言:

  • 父类静态部分
  • 子类静态部分
  • 父类普通成员
  • 父类构造器
  • 子类普通成员
  • 子类构造器

  • 由于静态变量在普通成员之前初始化,所以可以在静态变量定义顺序之前使用。

栗子:

class BaseTest {

    public int a = 21;

    {
        System.out.println("父类普通代码块: " + a);

    }

    public static int b = 22;

    static {
        System.out.println("父类静态代码块: " + b);
    }

    public BaseTest() {
        System.out.println("父类构造器");
    }
}


public class Test extends BaseTest {

    public int a = 23;

    {
        System.out.println("子类普通代码块: " + a);

    }

    public static int b = 24;

    static {
        System.out.println("子类静态代码块: " + b);
    }

    public Test() {
        System.out.println("子类构造器");

    }

    public static void main(String[] args) {
        new Test();
    }
}

运行结果:
父类静态代码块: 22
子类静态代码块: 24
父类普通代码块: 21
父类构造器
子类普通代码块: 23
子类构造器

你可能感兴趣的:(2020-02-01Java程序的初始化顺序)