思想:
這種靜態代碼塊模式,本質上是餓漢模式的一個變種。
它將類的靜態 Field 的初始化,轉移到靜態代碼塊中(這么做的優勢尚不明確)。
在 JDK 源碼中有一個具體的例子:sun.misc.Unsafe (是 Java 代碼用來直接操作內存空間的類)。
實現方式,就是把初始化的工作,放到靜態代碼塊中。
public final class StaticBlockSingleton { private static final StaticBlockSingleton instance; private static String str1; private static String str2; private StaticBlockSingleton() { if (instance != null) { throw new IllegalStateException(); } } static { instance = new StaticBlockSingleton(); str1 = "Field1"; str2 = "Field2"; } public static final StaticBlockSingleton getInstance() { return instance; } }
- 反射?多線程?優勢?劣勢?
與餓漢模式相同。見:設計模式(一)單例模式:1-餓漢模式(Eager)