use*_*872 6 java static load initialization
class Z
{
static final int x=10;
static
{
System.out.println("SIB");
}
}
public class Y
{
public static void main(String[] args)
{
System.out.println(Z.x);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:10为什么静态初始化块在这种情况下不加载?当静态x调用时,所有类z的静态成员必须至少加载一次但静态初始化块不加载.
声明中带有 static 修饰符的字段称为 静态字段或类变量。它们与类相关联,而不是与任何对象相关联。类的每个实例共享一个类变量,该变量位于内存中的一个固定位置。任何对象都可以更改类变量的值,但也可以在不创建类实例的情况下操作类变量
因此,当您Z.x如下调用时:
System.out.println(Z.x);
Run Code Online (Sandbox Code Playgroud)
它不会初始化该类,除非您调用它时它会从固定的内存位置Z.x获取该类。x
静态块在 JVM 加载时运行class Z。它永远不会在这里加载,因为它可以x直接访问它而无需加载类。