渴望实现Singleton的实例化

时间:2014-05-17 20:31:04

标签: java singleton

我有一个单身人士

public class Singleton
{
     private static Singleton instance = new Singleton();

     private Singleton()
     {
         System.out.println("Instance created.");
     }

     public static Singleton getInstance()
     {
         return instance;
     }
}

我可以运行此代码,但除非调用getInstance(),否则不会创建实例。这很奇怪,因为构建器中的println()应该执行,因为我正在使用急切的实例化。

有人可以解释一下吗?

2 个答案:

答案 0 :(得分:5)

在第一次加载类之前,

实例不会被创建,如果你想要在不调用getInstance()方法的情况下进行初始化而可以调用

Class.forName(Singleton.class.getName());

初始化

你有实例作为静态字段,静态字段在类加载事件上被初始化,所以如果你想要初始化,你只需要急切地加载类

答案 1 :(得分:2)

在代码中的某处访问类后,将加载与其关联的所有静态变量并为其分配值。

如果你的程序中使用类的第一个点是你调用getInstance()的点,那么将在那里加载类,静态变量将被初始化,构造函数将被运行。 / p>