类中代码执行顺序的总结

假设有如下代码

public class MyClass {
    private static int x;
    private int y = 10;

    // 静态代码块
    static {
        x = 10;
        System.out.println("静态代码块被执行");
    }

    // 实例初始化块
    {
        y = 20;
        System.out.println("实例初始化块被执行");
    }

    // 构造函数
    public MyClass() {
        System.out.println("构造函数被调用");
    }

    public static void main(String[] args) {
        MyClass obj = new MyClass();
    }
}

静态代码块

静态代码块在类加载时执行一次,即使创建多个类的实例也不会再次执行。也就是在类的静态成员被访问或者创建类的实例之前执行。静态代码块的语法形式是使用 static 关键字和花括号 {} 包围的一段代码,位于类中直接成员的位置。

实例初始化块

它的语法形式是使用花括号 {} 包围的一段代码,位于类中直接成员的位置,而不是在方法内部。实例初始化块在创建类的实例时被调用,并且在构造函数之前执行。它可以用来执行一些初始化操作,例如给实例变量赋初值、执行复杂的计算、加载资源等。每次创建类的实例时,实例初始化块都会被执行一次

实例变量初始化

实例变量分配内存空间,并根据其声明的初始值进行初始化。该语句在创建类的实例时执行。

执行顺序

  1. 静态代码块:在类加载时执行,用于对静态成员进行初始化。
  2. 实例变量初始化:在创建类的实例时执行,用于对实例变量进行初始化。
  3. 实例初始化块:在创建类的实例时执行,用于进一步对实例进行初始化。
  4. 构造函数:在创建类的实例时执行,用于完成最终的初始化操作。

示例

public class MyClass {
    private static int x = 10;
    private int y = 20;

    // 静态代码块
    static {
        System.out.println("静态代码块执行,x = " + x);
    }

    // 实例初始化块
    {
        System.out.println("实例初始化块执行,y = " + y);
    }

    // 构造函数
    public MyClass() {
        System.out.println("构造函数执行");
    }

    public static void main(String[] args) {
        MyClass obj = new MyClass();
    }
}

输出结果为

类中代码执行顺序的总结_第1张图片

你可能感兴趣的:(Java,java)