未分類

クラス変数、クラスメソッド

投稿日:

     

これまでのコードは、クラス内のメンバ(フィールドとメソッド)は、オブジェクトが作成されたときに、はじめて値を格納したり呼び出したりすることができました。

オブジェクトを作成することによって、キャラクターの属性や体力量といった値を代入したり、出力したりすることができました。

このことを、フィールドzokusei・tairyokuは

オブジェクトに関連づけられている

ということもあります。

各オブジェクトに関連づけられているフィールドをインスタンス変数、メソッドをインスタンスメソッドといいます。

クラス変数とクラスメソッド

クラスでは、オブジェクトに関連づけられていないメンバを持つことができます。これを、

クラス全体に関連づけられている

ということがあります。関連づけられているフィールドをクラス変数、メソッドをクラスメソッドといいます。

クラス変数・クラスメソッドの、宣言、定義するときにstaticという修飾子をつけることになっています。

クラス変数は0で初期化されています。「キャラクター」オブジェクトが作成されるたびに、「sum++;」が処理され値が増えていくのです。つまり、sumは、

クラス全体で何人のキャラクター(いくつのオブジェクト)が存在しているか

を表すフィールドです。このように、クラス全体で扱うデータを格納しておくフィールドがクラス変数です。

クラスメソッドであるshowSum()メソッドの定義です。

クラスメソッドは、

そのクラスからオブジェクトが作成されていなくても、メソッドを呼び出すことができるのです。

インスタンスメソッドのようにオブジェクトに関連づけられていないので、下記のように呼び出します。

Character.showSum(); //クラス名をつけて呼び出す

sumの値は最初は0ですがオブジェクトが作成された後「sum++;」により、1になっていることが確認できます。

クラスメソッドについての注意

以前クラス内のメンバに「this.」という指定をつけることができることを説明しました。

実は「this.」はインスタンスメソッドの中でのみ使用可能です。

クラスメソッドは特定のオブジェクトに関連づけられていないので、特定のオブジェクト自身を表す「this.」は使用不可となるのです。つまり、下記のようなコードは誤りです。

さらに、クラスメソッド内では、インスタンス変数・インスタンスメソッドにアクセスできません。クラスメソッドは、特定のオブジェクトに関連づけられていないためです。

つまり、下記のようなコードは誤りです。

コンストラクタの定義も、クラスには欠かせない機能です。クラス変数・クラスメソッドの特徴も理解しておきましょう。

-未分類

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

サンプルイメージ

配列のしくみ①

プログラムの中ではたくさんのデータを扱う場合があります。例えば、50体のキャラクターの攻撃力や体力や属性を扱うプログラムを考えてみましょう。 たくさんの変数が登場するので、コードが複雑で読みにくくなり …

サンプルイメージ

式と演算子

式のしくみを知る Javaの「式」の多くは、 演算子(演算するもの)とオペランド(演算の対象) を組み合わせてつくられています。たとえば、「1 + 2」の場合は、「+」が演算子、「1」と「2 …

Android イベントの処理

      ソースコード 実行結果は、KeyCode>24というように押されたキーコードが表示されます。 KeyExクラスは、プログラムの本体となるクラスです。 KeyViewクラスは、ビューとなるク …

Android 練習問題(文字、図形の描画)

     問題1-1 Kuku 九九の表を表示してください。 問題1-2 CheckerBoard 下図のように表示させてください。正方形の大きさは適当でよい。 問題1-3 AslantLine 以下 …

サンプルイメージ

練習問題(クラスの機能)

      練習9-1 下図の様な実行結果となるように下のプログラムの空欄を埋めて実行してください。 練習9-2 下記のような実行結果となるようにShohinクラスを作成してください。 練習9-3 下 …