java - 急切初始化单例 vs 惰性初始化单例

标签 java design-patterns singleton

在思考单例设计模式时,我在急切初始化单例和静态 block 初始化单例模式之间徘徊。 假设急切初始化单例类代码是 -

public class EagerInitSingleton {

    private static final EagerInitSingleton instance = new EagerInitSingleton();

    //private constructor
    private EagerInitSingleton(){}

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

和静态 block 单例类代码如下-

public class StaticBlockSingleton {

    private static StaticBlockSingleton instance;

    private StaticBlockSingleton(){}

    //static block initialization for exception handling
    static{
        try{
            instance = new StaticBlockSingleton();
        }catch(Exception e){
            throw new RuntimeException("Exception occured in singleton instance");
        }
    }

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

我们不要在这里谈论惰性初始化和线程安全。 我想弄清楚 Static block singleton 中的两个静态 block 在这里有何不同。

最佳答案

没有区别。

private static final EagerInitSingleton instance = new EagerInitSingleton();

相当于

private static final EagerInitSingleton instance;

static {
    instance = new EagerInitSingleton();
} 

关于java - 急切初始化单例 vs 惰性初始化单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36163249/

相关文章:

java - Hibernate 找不到属性的 setter (org.hibernate.PropertyNotFoundException)

c++ - 在服务器应用程序中将客户端信息存储在 map 中的设计模式建议

ios - Objective-C 动态实现

java - 创建 volatile 类是否保证 volatile 类变量

JavaScript 单例

java - 优缺点 : Hibernate vs. EJB 3

java - SQLite连接池

java - Java 中的多个 Mixer 输出

java - 工厂模式和依赖关系

asp.net - 从 ASP.NET Web 应用程序中使用 Lucene.Net 线程安全