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(使用前将#替换为@)