为什么静态初始化块在这个简单的情况下不运行?

2023-12-26

 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);
    }
}

输出:10 为什么在这种情况下静态初始化块不加载?当 static x 调用时,类 z 的所有静态成员必须至少加载一次,但静态初始化块不加载。


声明中带有 static 修饰符的字段称为静态字段 or 类变量. 他们与班级有联系, 而不是与任何物体。该类的每个实例共享一个 类变量,位于内存中的一个固定位置。任何物体 可以改变类变量的值,但是类变量也可以 无需创建类的实例即可进行操作

所以,当你打电话时Z.x如下:

System.out.println(Z.x);

它不会初始化该类,除非您调用该类Z.x它会得到那个x从那个固定的内存位置。

静态块在 JVM 加载时运行class Z。它永远不会被加载到这里,因为它可以访问它x直接来自而不加载类。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么静态初始化块在这个简单的情况下不运行? 的相关文章

随机推荐