相信大家对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大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习