告诉你何时Java静态变量初始化 - 极悦
首页 课程 师资 教程 报名

告诉你何时Java静态变量初始化

  • 2022-08-24 09:53:25
  • 1119次 极悦

初始化过程

相信大家对JVM是什么已经有所了解,在高层次上,JVM 执行以下步骤:

首先,加载和链接类。然后,这个过程的“初始化”阶段处理静态变量初始化。最后,调用与该类关联的main 方法。

类变量

在 Java 中,静态变量也称为类变量。也就是说,它们属于一个类而不是一个特定的实例。结果,类初始化将初始化静态变量。

相反,一个类的实例会初始化实例变量(非静态变量)。一个类的所有实例共享该类的静态变量。

让我们以StaticVariableDemo类为例:

public class StaticVariableDemo {  
    public static int i;
    public static int j = 20;
    public StaticVariableDemo() {}
}

首先,JVM为类StaticVariableDemo创建一个Class对象。接下来,静态字段初始值设定项为静态字段分配一个有意义的默认值。在上面的示例中,类变量i首先使用int默认值零初始化。

文本顺序适用于静态字段。首先,i将初始化,然后j将被初始化。之后,该类及其静态成员将对其他类可见。

静态块中的变量

让我们再举一个例子:

public class StaticVariableDemo {  
    public static int z;
    static {
        z = 30;
    }
    public StaticVariableDemo() {}
}

在这种情况下,Java变量初始化将按顺序进行。例如,JVM 最初将变量z分配给默认的int值 0。然后,在静态块中,它被更改为 30。

静态嵌套类中的变量

最后,让我们以外部 StaticVariableDemo类中的嵌套类为例:

public class StaticVariableDemo {  
    public StaticVariableDemo() {}    
    static class Nested {
        public static String nestedClassStaticVariable = "test";
    }
}

在这种情况下,StaticVariableDemo类加载了Nested类。它将初始化静态变量nestedClassStaticVariable。

选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交