こんにちは。ハンドルネーム「Javaを復習する初心者」です。このサイトはプログラミング言語Javaの復習・学習をするブログです。プログラムの開発・実行はEclipseで行ってます。
スポンサーリンク
お知らせ
  • 参考文献のページ作りました。
  • Amazon.co.jpアソシエイトに参加していますが、参考文献の紹介はもしもアフィリエイトに統一しました。
  • 2016年10月9日からは投稿ペースを落とします。週1回くらいにする予定です。
スポンサーリンク

staticフィールドを使う練習

こんにちは。「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

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