目的
インスタンス変数とクラス変数の違いについて理解するため
検証環境
- Eclipse Oxygen.3a Release (4.7.3a)
- Java8
検証用ソースコード
1.クラス変数とインスタンス変数
qiita.java
public class Oimo {
public static int CNT_CLASS; // クラス変数
public int CNT_INSTANCE; // インスタンス変数
}
2.クラス変数を試す
qiita.java
public class Kensho01 {
public static void main(String[] args) {
// クラス変数
Oimo oimo3 = new Oimo();
Oimo oimo4 = new Oimo();
oimo3.CNT_CLASS = 30;
System.out.println(oimo4.CNT_CLASS); // 30が出力される
}
}
3.インスタンス変数を試す
qiita.java
public class Kensho01 {
public static void main(String[] args) {
// インスタンス変数
Oimo oimo1 = new Oimo();
Oimo oimo2 = new Oimo();
oimo1.CNT_INSTANCE = 10;
System.out.println(oimo2.CNT_INSTANCE); // 0が出力される
}
}
実施手順
- クラス変数とインスタンス変数を持ったOimoクラスを用意。2つのOimoインスタンスを生成し、1つ目のインスタンスのクラス変数およびインスタンス変数に対して値を設定後、2つ目のOimoインスタンスに設定されているクラス変数およびインスタンス変数の値を確認する。
実施結果
- 1つ目のインスタンスのクラス変数に30を設定したところ、2つ目のインスタンスのクラス変数にも30が設定された。
- 1つ目のインスタンスのインスタンス変数に10を設定したところ、2つ目のインスタンスのインスタンス変数には0が設定された。
考察
インスタンス変数はインスタンス毎に参照する変数で、クラス変数は複数インスタンスが共通で参照する変数ということが分かった。スレッドセーフなプログラムを組もうと思ったら、この知識は大切なことが分かる。
ではまた(^_^)ノシ