第5回『オブジェクト生成とその利用』 |
※画像が大きすぎるときは,ブラウザの縮小を使って下さい(通常のWindows用Webブラウザの場合,コントロールキーを押しながら - キーを押すと縮小,コントロールキーを押しながら + キーを押すと拡大です)。
5-1 staticメンバ
●staticメンバ
・これまで見てきたように,通常のメンバは個々のオブジェクトの中に部品として内蔵されている。
・しかし,staticと指定されたメンバは,(個々のオブジェクトの中ではなく)そのクラスにただ1個だけ実体が存在する。
今回はこのことについて学習していく。
staticフィールドの宣言方法とstaticメソッドの定義方法を下図に示す。(1)例のCarTestjava, (2)例のCarTest.java
まとめると,
・フィールドでもメソッドでも,宣言・定義の前に static 指定をすると,staticメンバになる。
・staticメンバを利用する場合, クラス名.メンバ名 で指定するのが基本。
となる。
しかし,言葉だけで説明されてもピンとこないと思うので,次にアニメーションで実際のstaticメンバと 非static メンバの違いを確認してみよう。
List 3 ( ソースプログラムのダウンロード)
▼HTMLアニメーションによる解説(右下に「クリック」と表示されたらクリックで次に進めます)(ローカル再生用アーカイブファイル)
最初から再生
※友人どうしでペアになり,お互いに教師役になって説明してみよ。
![]() |
![]() |
●staicメソッドはstaticメンバしか使えない。非staticメソッドはstatic・非static関係無く他のメンバを利用できる。
staticメソッドは,そのクラスのオブジェクトがまったく生成されていない状態でも呼ばれる可能性があるし,その時も正常に動作しなければならない。
前述の StaticMember.java の例で言うと,A型オブジェクトが1個も生成されていない⑤の状態でもA.stmメソッドは動作しなければならない。
この時点で存在して利用可能なクラスAのメンバはstaticメンバだけである。
つまり,staticメソッドはstaticなメンバしか利用できないのである。
実際に,staticメソッドの中で非staticメンバを使おうとするとエラーになる。
所属先 | 種類 | 別の呼び名 | |
---|---|---|---|
非staticメンバ | 個々の オブジェクト(インスタンス) |
非static変数 |
インスタンス変数 (インスタンスフィールド) |
非staticメソッド | インスタンスメソッド | ||
staticメンバ | クラス | static変数 (staticフィールド) |
クラス変数 (クラスフィールド) |
staticメソッド | クラスメソッド |
特に,今までもよく使っていた「クラス型変数」とここで紹介した「クラス変数」の違いに注意して下さい。
・「クラス型変数」は,名称に「型」がついているように「とにかくデータ型がクラスの変数」のこと。
・「クラス変数」は,どんなデータ型かは関係無く,「クラスのstaticメンバとして宣言された変数」のことです。