例えば、以下のクラスをnewしてインスタンスを生成する際、インスタンスをnewした回数を取り扱いたい場合は、クラスの中にクラスフィールドという、全インスタンスに共通の情報保存場所が必要になります。
この保存場所をクラスフィールド(またはクラス変数、スタティックフィールド)と呼び、クラス内に宣言することができます。
これまでに作ってきたクラス
class TestClassSub
{
//フィールドの初期化
int TestA = 10;
int TestB = 30;
TestClassSub(int a, int b) {
//やっていることは「setTest」メソッドを同じ
TestA = a;
TestB = b;
}
TestClassSub() {
//引数なしコンストラクタ用
}
void setTest(int a, int b){
TestA = a;
TestB = b;
}
int sumAB(){
return TestA + TestB;
}
}
上記のクラスに対し、クラスフィールドを加えたクラス
class TestClassSub
{
//フィールドの初期化
int TestA = 10;
int TestB = 30;
static int TestC = 20;
TestClassSub(int a, int b) {
//やっていることは「setTest」メソッドを同じ
TestA = a;
TestB = b;
}
TestClassSub() {
//引数なしコンストラクタ用
}
void setTest(int a, int b){
TestA = a;
TestB = b;
}
int sumAB(){
return TestA + TestB;
}
}
上記のTestClassSubクラスを使う場合、一度、クラスのインスタンスを生成し、クラスフィールドを加算するメソッドを何度か呼んでみます。
public class TestClass5 {
public static void main(String[] args) {
int retA;
System.out.print("hello\n");
//引数なしコンストラクタ
TestClassSub tc = new TestClassSub();
retA = tc.countUpTestC();
System.out.print("retA -> " + retA + "\n");
retA = tc.countUpTestC();
System.out.print("retA -> " + retA + "\n");
retA = tc.countUpTestC();
System.out.print("retA -> " + retA + "\n");
retA = tc.countUpTestC();
System.out.print("retA -> " + retA + "\n");
retA = tc.countUpTestC();
System.out.print("retA -> " + retA + "\n");
}
}
class TestClassSub
{
//フィールドの初期化
int TestA = 10;
int TestB = 30;
static int TestC = 20;
TestClassSub(int a, int b) {
//やっていることは「setTest」メソッドを同じ
TestA = a;
TestB = b;
}
TestClassSub() {
//引数なしコンストラクタ用
}
void setTest(int a, int b){
TestA = a;
TestB = b;
}
int sumAB(){
return TestA + TestB;
}
int countUpTestC(){
return TestC++;
}
}
すると、実行した結果は次のようになります。
hello retA -> 20 retA -> 21 retA -> 22 retA -> 23 retA -> 24