因为静态变量在类加载时获得了内存,所以我在这里通过创建新的A()来分配它,它将在加载类之后的运行时分配。 jvm如何赋值new A()在课堂加载时?
public class A{
static A objA =new A();
public static void main(String x[]){}
}
答案 0 :(得分:2)
这里没什么奇怪的。加载该类,然后创建new A()
并将其分配给objA
。内部实际发生的方式并不真正相关,并且可能因JVM而异。
答案 1 :(得分:2)
当加载类时,JVM调用名为<clinit>()V
的类中的方法。此方法设置所有初始值,在您的情况下,它设置静态字段。
它可以在调用方法时创建实例,但它确实意味着您不能在构造函数中假设已经设置了所有静态字段。