我有一个班级:
public class Foo {
public static boolean flag = false;
//some code
}
我在另一个类中使用此boolean
标志:
public class FooImpl{
public static void main (String args[]) {
if (Foo.flag){
//Line 1
//some code
}
}
}
所以在Line 1
,类Foo
是否在内存中完全加载,或者只是静态变量加载了默认值?
答案 0 :(得分:3)
答案 1 :(得分:-3)
当有对类的静态引用时,类会被加载。它由ClassLoader [java.lang.ClassLoader]加载。
当您访问类成员或构造函数[创建该类的实例]时,您需要有关该类的信息并加载它。
对于某些库函数调用,您可能已经看到了一些ClassNotFoundException。 ClassLoader就在后面。
但是还有一个事实是,当首先使用类中的某些东西时,类会被初始化。
Initialization of a class consists of executing its static initializers and the initializers
表示在类中声明的静态字段(类变量)。
在第1行中,您指的是类的成员,并且肯定会加载。
初始化发生:
T是一个类,并创建了一个T实例。
对静态字段的引用(第8.3.1.1节)仅导致类或类的初始化 实际声明它的接口,即使它可能通过引用 子类的名称,子接口或实现接口的类。