我有一个单身人士
public class Singleton
{
private static Singleton instance = new Singleton();
private Singleton()
{
System.out.println("Instance created.");
}
public static Singleton getInstance()
{
return instance;
}
}
我可以运行此代码,但除非调用getInstance()
,否则不会创建实例。这很奇怪,因为构建器中的println()
应该执行,因为我正在使用急切的实例化。
有人可以解释一下吗?
答案 0 :(得分:5)
实例不会被创建,如果你想要在不调用getInstance()
方法的情况下进行初始化而可以调用
Class.forName(Singleton.class.getName());
初始化
你有实例作为静态字段,静态字段在类加载事件上被初始化,所以如果你想要初始化,你只需要急切地加载类
答案 1 :(得分:2)
在代码中的某处访问类后,将加载与其关联的所有静态变量并为其分配值。
如果你的程序中使用类的第一个点是你调用getInstance()
的点,那么将在那里加载类,静态变量将被初始化,构造函数将被运行。 / p>