专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 告诉你何时Java静态变量初始化

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

更新时间:2022-08-24 09:53:25 来源:动力节点 浏览924次

初始化过程

相信大家对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。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>