未分類

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

投稿日:

     

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

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

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

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

ということもあります。

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

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

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

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

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

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

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

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

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

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

クラスメソッドは、

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

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

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

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

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

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

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

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

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

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

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

-未分類

執筆者:


comment

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

関連記事

サンプルイメージ

キーボードからの入力

キーボードからいろいろな文字を入力させ、その値を出力するコードを記述してみましょう。 String str = br.readLine(); という部分が重要です。実行画面がユーザーからの入力を待つ状 …

サンプルイメージ

関係演算子と条件

条件のしくみ これまでのコードは1文ずつ順序よく処理が行われていました。しかし、「場合に応じた処理」を行うことができます。 ゲームのスコアが良かったら・・・→ボーナスステージに行く ゲームのスコアが悪 …

サンプルイメージ

プログラミングの効率的な勉強法

やる前から苦手意識を持たない。答えは一つではない。 プログラミングはパソコンに対してこうしろと命令文を書いているだけです。 少し勉強しただけで、自分にはプログラミングに向いていないと諦めてしまう人がい …

サンプルイメージ

クラスの機能

       まず、最初にクラスのフィールド、メソッドを取り上げていきます。 前の章で取り上げたコードです。フィールドに属性や体力量を代入しています。 実際にキャラクターの属性や体力量を設定する かの …

サンプルイメージ

演算子の優先順位

a + 2 * 5  2*5が先に評価されます。 この式では、+演算子と*演算子の2つが使われています。通常の四則演算では、たし算よりかけ算を先に計算します。これは、かけ算の方が 優先順位が高い から …