遅延初期化(lazy initialization)とは、メンバフィールドやメンバフィールドが参照するオブジェクトの生成を、インスタンスが実際に必要になるまで延期することである。これにより、クラスのコンストラクタにおいて、フィールドの値を計算したり参照されるオブジェクトを生成したりする必要がなくなる。また、クラスやインスタンスの循環初期化を防止することにもつながり、その他の最適化も可能になる。 遅延初期化にはクラスメソッドあるいはインスタンスメソッドが用いられる。どちらが用いられるかはメンバオブジェクトが static であるかどうかによる。メソッドは、インスタンスが生成済であるかどうかを確認し、生成されていない場合にはインスタンスを生成する。インスタンスが生成済みの場合、単純にインスタンスを返す。 // 遅延初期化をシングルスレッドで行う、正しいバージョン final class Foo
![LCK10-J. ダブルチェックロック手法を誤用しない](https://cdn-ak-scissors.b.st-hatena.com/image/square/7dd958779816f7e1a8006230cb8f8f321ee39ab8/height=288;version=1;width=512/https%3A%2F%2Fwww.jpcert.or.jp%2Fcommon%2Fimage%2Fogp_image.jpg)