Javaに限ったことでは無いですが、オブジェクト指向言語にて、プログラムを動かす時には、様々なインスタンスが生成されます。
しかし、特定のクラスのインスタンスは必ず1つしか生成したくないというケースがあります。具体的には、システム全体を制御するクラスや画面を制御するクラスなどです。
プログラマーが、
「必ずこのクラスのインスタンスは必ず1つしか生成するなよ? 絶対だぞ??」
と肝に命じてプログラミングを行えば、複数インスタンスが生成されることは無さそうですが、様々なプログラマーが開発を行うようなプロジェクトでは、そうゆう訳にはいきません。(振りじゃないぞ?)
そんな時は、デザインパターンのうちの1つ、
『Singleton(シングルトン)パターン』
という、インスタンスが1個しか存在しないパターンを駆使したプログラミングを行います。
ちなみに、デザインパターンというのは、プログラムやライブラリのことではなく、どこかの偉い人が考えた、とても効率の良い設計パターンのことです。
参考文献 デザインパターン(Wikipedia):
Singletonクラス
説明)インスタンスが1つしか存在しないクラスです。
SingletonMainクラス
説明) 動作用のテストクラスです。
Singletonクラスは、Singleton型のフィールド singleton を保持しており、getInstanceメソッドにて、singleton を戻り値として渡します。
ここでミソなのが、 singleton が static で宣言されていることです。Javaでは、 static が付いたフィールド、クラスは静的フィールド、静的クラスとして扱われ、プログラム実行中は存在し続けます。
そして、getInstance メソッドでは、必ず静的フィールドsingleton を返却。つまり、同一のインスタンスが返却しています。
SingletonMainクラスを実行した際、インスタンスの生成を2回(5、6行目)試みていますが、インスタンス同士を比較した際、同一インスタンスであるため(11行目)、必ずいつも同一の値となります。