第5回『オブジェクト生成とその利用』

※画像が大きすぎるときは,ブラウザの縮小を使って下さい(通常のWindows用Webブラウザの場合,コントロールキーを押しながら - キーを押すと縮小,コントロールキーを押しながら + キーを押すと拡大です)。

●staticメンバ

・これまで見てきたように,通常のメンバは個々のオブジェクトの中に部品として内蔵されている。
・しかし,staticと指定されたメンバは,(個々のオブジェクトの中ではなく)そのクラスにただ1個だけ実体が存在する。

staticフィールドの宣言方法とstaticメソッドの定義方法を下図に示す。


まとめると,
  ・フィールドでもメソッドでも,宣言・定義の前に static 指定をすると,staticメンバになる
  ・staticメンバを利用する場合, クラス名.メンバ名 で指定するのが基本。
となる。

しかし,言葉だけで説明されてもピンとこないと思うので,次にアニメーションで実際のstaticメンバと 非static メンバの違いを確認してみよう。


●staticメンバと非staticメンバの違い


では,staticメンバと 非static メンバの違いを,次のFLASHアニメーションで確認してみよう。

List 3 ( ソースプログラムのダウンロード)
▼HTMLアニメーションによる解説(右下に「クリック」と表示されたらクリックで次に進めます)(ローカル再生用アーカイブファイル)
最初から再生
※友人どうしでペアになり,お互いに教師役になって説明してみよ。


上のアニメーションで紹介したソースプログラム
List603


●staicメソッドはstaticメンバしか使えない。非staticメソッドはstatic・非static関係無く他のメンバを利用できる。

 staticメソッドは,そのクラスのオブジェクトがまったく生成されていない状態でも呼ばれる可能性があるし,その時も正常に動作しなければならない。
前述の StaticMember.java の例で言うと,A型オブジェクトが1個も生成されていない⑤の状態でもA.stmメソッドは動作しなければならない。
この時点で存在して利用可能なクラスAのメンバはstaticメンバだけである。



つまり,staticメソッドはstaticなメンバしか利用できないのである。
実際に,staticメソッドの中で非staticメンバを使おうとするとエラーになる。



●非staicメンバとstaticメンバの別の呼び名


  非staicメンバとstaticメンバの違いは,これまで説明してきたように

   ・ 非staicメンバは個々のオブジェクト(インスタンス)に属する。
   ・ staticメンバは,クラスに属する。

となるわけだが,その所属先という観点から以下の様に別の呼び方がある。

  所属先 種類 別の呼び名
非staticメンバ 個々の
オブジェクト(インスタンス)

非static変数
(非staticフィールド)

インスタンス変数
(インスタンスフィールド)
非staticメソッド インスタンスメソッド
staticメンバ クラス static変数
(staticフィールド)
クラス変数
(クラスフィールド)
staticメソッド クラスメソッド


特に,今までもよく使っていた「クラス型変数」とここで紹介した「クラス変数」の違いに注意して下さい。
  ・「クラス型変数」は,名称に「型」がついているように「とにかくデータ型がクラスの変数」のこと。
  ・「クラス変数」は,どんなデータ型かは関係無く,「クラスのstaticメンバとして宣言された変数」のことです。



次に進む