饥饿实现的Java单例模式
我有一些这样的代码饥饿实现的Java单例模式,java,static,singleton,Java,Static,Singleton,我有一些这样的代码 public class MySingleton { private static MySingleton instance = new MySingleton(); private MySingleton(){} public static MySingleton getInstance() { return instance; } } 这是Java中singleton模式的一个饥饿实现,我们知道该实例是在调用getInstance
public class MySingleton {
private static MySingleton instance = new MySingleton();
private MySingleton(){}
public static MySingleton getInstance() {
return instance;
} }
在这种情况下,在第一次调用getInstance之前,几乎肯定不会初始化此问题中发布的类。2nd语句为false,静态成员在加载其所在的类时初始化,而不是在创建该类的第一个实例时初始化 它很容易显示,因为您不需要类的实例来访问其静态成员 即。 MyClass.intVar=5可以正常工作。
您不需要首先实例化MyClass。第二条语句为false,静态成员在加载它们所在的类时初始化,而不是在创建该类的第一个实例时初始化 它很容易显示,因为您不需要类的实例来访问其静态成员 即。 MyClass.intVar=5可以正常工作。
您不需要先实例化MyClass。我不清楚这个问题是否与“何时进行静态类初始化?”的问题相同。这个问题是关于建议的单例实现的正确性。在这种情况下,在实例化类之后,不会实例化类成员,它在初始化类时被实例化,在本例中,也是在第一次调用
getInstance
时。但是,请记住,这是一个不必要的复杂的单例实现。一个更简单的问题是public enum Singleton{INSTANCE;}
。我不清楚这个问题是否与“何时进行静态类初始化?”重复。这个问题是关于建议的Singleton实现的正确性。在这种情况下,类实例化后不会实例化类成员,它在初始化类时被实例化,在本例中,也是在第一次调用getInstance
时。但是,请记住,这是一个不必要的复杂的单例实现。一个更简单的方法是public enum Singleton{INSTANCE;}
。加载类时不会初始化类的静态成员!当类被初始化时,它们被初始化。在第一次调用getInstance
之前,几乎肯定不会初始化这个问题中发布的类。在那个时候,实例将被初始化为静态引用,直到那个时候,或者至少直到其他限定事件发生,但是这个代码不允许其他限定事件。我知道了,谢谢!加载类时,不会初始化类的静态成员!当类被初始化时,它们被初始化。在第一次调用getInstance
之前,几乎肯定不会初始化这个问题中发布的类。在那个时候,实例将被初始化为静态引用,直到那个时候,或者至少直到其他限定事件发生,但是这个代码不允许其他限定事件。我知道了,谢谢!