-2
我在java中有以下场景。当对象被创建时
class Apple {
static Apple ap = new Apple();
public static void main(String[] arg) {
}
}
什么时候这个全局对象被创建?
如果它是在类加载器时创建的,那么它是否在当时加载所有非静态成员?
我在java中有以下场景。当对象被创建时
class Apple {
static Apple ap = new Apple();
public static void main(String[] arg) {
}
}
什么时候这个全局对象被创建?
如果它是在类加载器时创建的,那么它是否在当时加载所有非静态成员?
ap
当类首次加载到内存时被初始化。
当ap
被初始化时,它会创建一个Apple
对象,并且ap
对象的所有非静态成员都将按照构造函数中的指定进行初始化。
因此ap
的非静态成员在类加载时被初始化。
在你的例子中没有非静态成员... – assylias 2013-02-11 10:58:30
可能的[关于静态成员变量的问题]的副本(http://stackoverflow.com/questions/6541805/question-about-static-member-variables) – 2013-02-11 10:58:39
*编译器实际上做的是在内部产生一个类初始化例程,它按照它们出现在类声明中的顺序将所有静态变量初始值设定项和所有静态初始化块代码组合在一起。这个单一的初始化过程是自动运行的,只有一次,当类首次加载时* David Flanagan,Java的作者,果壳, – 2013-02-11 11:01:29