5. フィールド
2006.10.2 株式会社四次元データ 西谷太郎
モノの持つ属性であるフィールドは、Java のプログラム上ではクラス変数もしくはインスタンス変数として
表現することができます。
クラス変数とはクラスに属する変数で、アプリケーション全体で同じ値を参照します。一方、インスタンス変数は
それぞれのインスタンスが個別に持つ変数で、インスタンスごとに異なった値を参照します。
基本的な変数の宣言方法は以下の通りで、修飾子に static を含めることでクラス変数であることを宣言することができます。
修飾子 データ型 変数名;
データ型と変数名に関しては3章でやった通りです。
修飾子は、その変数の性質を決めるもので、public、protected、private、static などがあります。
ここでは、修飾子はprivate、データ型Stringを使うことにして、「名前」をインスタンス変数として定義することにします。 すると次のようになります。
public class Human { private String name = null; private int age = -1; }
宣言と同時に変数に値を代入することも出来ます。名前に関しては、参照型データが何も指していないことを示すnullという
特別な値を代入して初期化しています。
これで、このクラスファイルは「名前と年齢を持つ人」の設計図になりました。
ただしあくまで設計図なので、この人がなんという名前で、何歳なのかは決まっていません。
具体的な人を用意(インスタンスを生成)して、具体的な値をセットして初めてなんという名前で何歳か、などが決まるのです。
各インスタンスに個々の値が与えられるインスタンス変数に対して、クラス変数はひとつの変数をそのクラスの
インスタンス全体で共有します。
目の数。人の目の数が2つであることは、どのインスタンスにも共通です。宣言の仕方はインスタンス変数と同じですが、
修飾子としてstaticを加えることでクラス変数であることを表します。(目の数などは本来なら final 修飾子をつけて、
「定数」としてしまうのがよいのかも知れませんが)
「同じ値を持っている」のではなく、「ひとつの変数を全てのインスタンスが共有で使っている」ことに注意しましょう。
そのためクラス変数に対する値の変更は、クラス本体とその全てのインスタンスにおいて反映されます。Humanに追記するなら、
public class Human { private String name = null; private int age = -1; private static int NUM_EYE = 2; }
と、なります。