Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
饥饿实现的Java单例模式_Java_Static_Singleton - Fatal编程技术网

饥饿实现的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;  
}  }  
  • 这是Java中singleton模式的一个饥饿实现,我们知道该实例是在调用getInstance之前创建的

  • 我们还知道,当实例化类MySingleton时,静态成员将被实例化。只有在上面的代码中调用了getInstance时,才会实例化MySingleton类。因此,该实例是在调用getInstance之后创建的

  • 那么哪一个是对的

    为什么

    这个问题不是重复的

    它并没有讨论何时发生静态类初始化,而是对singleton模式的饥饿实现表示怀疑


    在这种情况下,在第一次调用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
    之前,几乎肯定不会初始化这个问题中发布的类。在那个时候,实例将被初始化为静态引用,直到那个时候,或者至少直到其他限定事件发生,但是这个代码不允许其他限定事件。我知道了,谢谢!