こんにちは。「Javaを復習する初心者」です。
今回はクラス変数とインスタンス変数を練習をしました。クラスを定義し、中括弧の中(かつメソッドの外)に変数を定義できます。これはフィールドと呼ばれます。アクセス修飾子(privateやpublic)以外に、「static」と「final」を指定することができます。
staticの有無
staticの有無で以下のようにフィールドを呼びます。
static有無 | 呼び方 |
---|---|
有 | クラス変数 |
無 | インスタンス変数 |
クラス変数はクラスで共通の変数になります。インスタンスA, Bがあったとすると、A, Bどちらからでも同じ値を参照することになります。インスタンス変数はインスタンスごとに確保される変数です。クラス変数、インスタンス変数どちらも初期化を省略すると定められた初期値が設定されます。
クラス変数の練習
クラス変数の練習は例えば、生成されたインスタンスをカウントするプログラムでしょうか。まず、以下のクラスを作成します。
クラス名 | StaticFieldTest |
フィールド |
|
メソッド |
|
これを以下のように使ってみます。
- StaticFieldTest型変数test1, test2, test3にインスタンスを格納する。
- test1からtest3まで以下の出力をする。
instanceNumber + “番目のインスタンス” - 以下の出力をする。
“生成したインスタンスの数: ” + 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
クラス変数が加算され、どのインスタンスでも共通に使われていることが分かります。