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
子类构造器
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容