未分類

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

投稿日:

     

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

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

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

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

ということもあります。

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

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

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

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

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

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

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

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

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

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

クラスメソッドは、

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

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

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

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

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

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

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

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

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

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

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

-未分類

執筆者:


comment

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

関連記事

サンプルイメージ

List、Mapインターフェイス

     ArrayListとは、配列とよく似ています。値の集合を扱うときに利用します。 リストは要素が追加された順番を保持します。又重複した要素もそのまま保持することができます。 下記のコードでは、 …

サンプルイメージ

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

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

サンプルイメージ

継承

    継承のしくみを知る これまでは、「キャラクタ」の機能をまとめたクラスを使って、プログラムを作成してきました。この章では、さらに、新しいプログラムを作成していくことにしましょう。 5種類の格闘ゲ …

サンプルイメージ

式と演算子

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

サンプルイメージ

画面への出力

前回画面に文字列を出力するコードを学習しました。「System.out.println・・・」という言葉に注目してください。この「System.out」とは、 標準出力(standard output …