java-beginner.com ブログ

プログラミングを学習するブログ(Javaをメインに)

staticフィールドを使う練習

投稿日:

最終更新日:2016年07月24日

アイキャッチ

こんにちは。「Javaを復習する初心者」です。

今回はクラス変数とインスタンス変数を練習をしました。クラスを定義し、中括弧の中(かつメソッドの外)に変数を定義できます。これはフィールドと呼ばれます。アクセス修飾子(privateやpublic)以外に、「static」と「final」を指定することができます。

staticの有無

staticの有無で以下のようにフィールドを呼びます。

static有無 呼び方
クラス変数
インスタンス変数

クラス変数はクラスで共通の変数になります。インスタンスA, Bがあったとすると、A, Bどちらからでも同じ値を参照することになります。インスタンス変数はインスタンスごとに確保される変数です。クラス変数、インスタンス変数どちらも初期化を省略すると定められた初期値が設定されます。

クラス変数の練習

クラス変数の練習は例えば、生成されたインスタンスをカウントするプログラムでしょうか。まず、以下のクラスを作成します。

クラス名 StaticFieldTest
フィールド
  • private static int count
  • private int instanceNumber
メソッド
public StaticFieldTest()
countを加算し、加算後の値をinstanceNumberに格納する。
public static int getCount()
countを取得する。
public int getInstanceNumber()
instanceNumberを取得する。

これを以下のように使ってみます。

  1. StaticFieldTest型変数test1, test2, test3にインスタンスを格納する。
  2. test1からtest3まで以下の出力をする。
    instanceNumber + “番目のインスタンス”
  3. 以下の出力をする。
    “生成したインスタンスの数: ” + StaticFieldTest.getCount()

これを実装していきます。

ソースと実行結果

以下はソースと実行結果です。

ソースコード

package practice;

public class Hello20160724 {

    public static void main(String[] args) {

        StaticFieldTest test1 = new StaticFieldTest();
        StaticFieldTest test2 = new StaticFieldTest();
        StaticFieldTest test3 = new StaticFieldTest();

        System.out.println(test1.getInstanceNumber() + "番目のインスタンス");
        System.out.println(test2.getInstanceNumber() + "番目のインスタンス");
        System.out.println(test3.getInstanceNumber() + "番目のインスタンス");

        System.out.println("生成したインスタンスの数: " + StaticFieldTest.getCount());

    }

}

class StaticFieldTest {

    private static int count;

    private int instanceNumber;

    public StaticFieldTest() {
        instanceNumber = ++count;
    }

    public static int getCount() {
        return count;
    }

    public int getInstanceNumber() {
        return instanceNumber;
    }

}

結果

1番目のインスタンス
2番目のインスタンス
3番目のインスタンス
生成したインスタンスの数: 3

クラス変数が加算され、どのインスタンスでも共通に使われていることが分かります。