返回

Java类中成员变量的初始化顺序

后端

Java类中成员变量的初始化顺序

在Java中,类中的成员变量在创建对象时会自动初始化。成员变量的初始化顺序与变量的类型、作用域和是否为静态变量有关。

基本类型和引用类型的初始化顺序

基本类型变量在创建对象时会自动初始化为默认值。默认值对于数字类型(如int、long、double等)为0,对于布尔类型为false,对于char类型为'\u0000'。

引用类型变量在创建对象时会自动初始化为null。

静态变量和实例变量的初始化顺序

静态变量在类加载时初始化,而实例变量在创建对象时初始化。

静态变量的初始化顺序与变量的声明顺序无关。所有静态变量都会在类加载时初始化,无论它们是否被使用。

实例变量的初始化顺序与变量的声明顺序有关。实例变量会在创建对象时按声明顺序初始化。

继承关系中成员变量的初始化顺序

如果类中存在继承关系,则导出类的成员变量会在基类的成员变量之后初始化。

例如,如果类Son继承类Father,则类Son中的成员变量会在类Father中的成员变量之后初始化。

代码示例

以下代码示例展示了Java类中成员变量的初始化顺序:

public class Father {
    private int a;
    private int b;

    public Father() {
        System.out.println("Father constructor called");
        System.out.println("a = " + a);
        System.out.println("b = " + b);
    }
}

public class Son extends Father {
    private int c;
    private int d;

    public Son() {
        System.out.println("Son constructor called");
        System.out.println("c = " + c);
        System.out.println("d = " + d);
    }

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

输出结果如下:

Father constructor called
a = 0
b = 0
Son constructor called
c = 0
d = 0

从结果可以看出,类中成员变量的初始化顺序是:

  1. 基本类型变量在创建对象时会自动初始化为默认值。
  2. 引用类型变量在创建对象时会自动初始化为null。
  3. 静态变量在类加载时初始化。
  4. 实例变量在创建对象时按声明顺序初始化。
  5. 如果类中存在继承关系,则导出类的成员变量会在基类的成员变量之后初始化。