未分類

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

投稿日:

     

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

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

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

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

ということもあります。

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

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

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

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

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

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

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

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

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

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

クラスメソッドは、

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

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

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

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

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

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

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

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

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

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

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

-未分類

執筆者:


comment

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

関連記事

サンプルイメージ

変数

変数のしくみを知る プログラムを実行するとき、いろいろな値を記憶させながら処理をしていきます。例えば ユーザーが入力した数値を画面に出力する というプログラムについて考えてみましょう。まず、数値をどこ …

サンプルイメージ

クラスライブラリのしくみ

                 今まで、クラスの基本について学びました。これまでは以下のような手順でクラスを作成してきました。 クラスを設計するコードを書く → クラスを宣言するクラスを利用するコー …

サンプルイメージ

練習問題(クラスの利用)(後半)

          練習10-7 下記のような結果となるように、ArrayTest1.javaにshowArrayメソッドを追加してください。 練習10-8 下記のようになるように配列の中に、負の数が …

Androidで神経衰弱ゲームつくりました。

       プログラムの解説 14行目のT[ ]はカードをシャッフルする領域です。 Tebanは、プログラムを制御する領域です。  0の時は、1枚目のカードをクリックします。 1の時は、2枚目のカー …

サンプルイメージ

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

          ここまでは、クラスとその機能を見てきました。次の章では、クラスを実際に活用していく方法を学んでいきましょう。