這個問題我也是從單例設計模式中找到的,問題如下
先帖代碼
public class Main {
public Main() {
System.out.println("controut");
}
public static void main(String[] args) {
System.out.println("main");
// InnerMain main2 = new InnerMain();
// Main main = InnerMain.mian;
}
private static class InnerMain {
public static final Main mian = new Main();
}
}
再貼結果

運行結果
]
看到沒,所謂的靜態(tài)屬性根本沒有執(zhí)行
就是這句
public static final Main mian = new Main();
講道理。。。。
在程序初始化的時候,所有的靜態(tài)屬性應該全部分配內存,但是為何唯獨靜態(tài)內部類中的靜態(tài)屬性沒有分配?
作出以下猜測:
靜態(tài)內部類和靜態(tài)方法一致,如果沒有調用,則不會被加載,當被使用時,類加載器進行加載然后分配其靜態(tài)屬性的內存空間
你看 我將注釋的兩句代碼 任何一句取消注釋,都會調用構造方法。

運行結果
所以單利模式考慮懶漢式和線程安全的情況下 ,采用靜態(tài)內部類為最好的解決方案。