当我思考单例设计模式时,我陷入了急切初始化单例和静态块初始化单例模式之间的选择。 假设急切初始化单例类代码如下 -
public class EagerInitSingleton {
private static final EagerInitSingleton instance = new EagerInitSingleton();
//private constructor
private EagerInitSingleton(){}
public static EagerInitSingleton getInstance(){
return instance;
}
}
以下是静态块单例类代码-
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;
}
}
在这里不讨论懒加载和线程安全问题。我想了解静态块单例中的两个静态块如何产生差异。