在Java中早期初始化Singleton类是什么意思

Ank*_*kur 2 java lifecycle singleton

我不太清楚Singleton类的早期初始化这个术语是什么意思.理解Singleton类的生命周期也很有帮助.

anu*_*ava 7

Lazy initialization意味着在第一次使用对象之前不会初始化对象.

Early initialization 只是反向,你在类加载时预先初始化单例.

有一些方法可以进行早期初始化,一种方法是将你的单例声明为static.

以下为例:

public class SingletonClassEarly {
    private static SingletonClassEarly sce = new SingletonClassEarly();
    private SingletonClassEarly() {} // make it private

    public static SingletonClassEarly getInstance() {
        return sce;
    }
}
Run Code Online (Sandbox Code Playgroud)

根据生命周期,在JVM启动后以及初始化类时加载此单例.它在关闭/退出时由JVM卸载.

  • @upog:使用 `Enum` 是另一种方式,或者使用 Spring 等框架注入单例。 (2认同)

Pra*_*ran 6

延迟初始化

 class SingletonClass {

     private static SingletonClass object;
     private SingletonClass () {} 
     public static SingletonClass getInstance(){
        if(object == null){
            object= new SingletonClass (); //Lazy Initalizaion 
        }
        return object;
    }
 }
Run Code Online (Sandbox Code Playgroud)

早期初始化

  class SingletonClass {

     private static SingletonClass object = new SingletonClass (); //Early initialization
     private SingletonClass () {} 

     public static SingletonClass getInstance(){
        return object;
    }
 }
Run Code Online (Sandbox Code Playgroud)