普通、シングルトンなクラスを作るとき、ふつう初期化は以下のようにする public class Hoge { private static final Hoge hoge = new Hoge(); private Hoge() {} public static Hoge getInstance() { return hoge; } } でも、これだとクラスHogeを参照しただけでインスタンスが作成されてしまって、必要ない場合でもインスタンスが構築されちゃっていやだなあ、遅延初期化出来ないかなあ、と思っていたところ、以下のような書き方があることを知った。 public class Hoge { private static class HogeHolder { static final Hoge hoge = new Hoge(); } private Hoge() {} public s