26.1.7.5 最初の卵

Javaで書くものはすべてクラス(=仕様書)で,実物であるインスタンス(=現物)ではありません. 一方,実際にプログラムとして動くのはインスタンスです.仕様書だけでは物はうごきません. インスタンスはクラス名(たとえば Example)を使って

Example a = new Example();

という文を(どこかのインスタンスの中で)実行すると作られます.同じクラス名を使った new 文はいくつでも書けます.これで部品を沢山作ることができるわけです.

Example a1 = new Example();
Example a2 = new Example();
Example a3 = new Example();

というぐあいです.

ところで new 自体はどこかのインスタンスで実行される必要がありますが,そのインスタンス自体もどこかで作られなければなりません.Java のプログラムはクラス定義のみですから,これではいくらたってもらちがあきません.動かすための最初の卵はどこに誰がうむのでしょうか.

Javaでは「最初の卵」を仕様書(クラス)の中に用意します.

クラスは「仕様書」だと言いましたが,その仕様書から作られるすべての製品(インスタンス)に共通なデータやメソッドは,仕様書自体に用意することができます.たとえば,「作られた製品の現在数」とか「仕様書の作成日付」といったデータは,個々の製品のデータというよりは全体に共通のデータですから,仕様書(クラス)が保持するのが自然です.そして,仕様書が保持するデータやメソッドは,実際の製品を作らなくても使用できる現物として,言い換えれば,仕様書を定義した段階で存在するインスタンス(のようなもの)として利用できます.これが「卵」となります.

クラス共通のデータやメソッドは,クラス定義の中で「性質」として

static

を指定します.おなじみの main の前にもついていましたね.そうです,main メソッドは「とにかくプログラムを動かし始める」ための卵だったわけです.「最初に main メソッドを動かす」のは Java での約束ごとになっています.