クラスに関連つけられているメソッド・変数を使いたい!
class クラス名{
static 型名 クラス変数名; }
アクセス修飾子 static 戻り値の型 クラスメソッド名(){ 処理; }
以下は、クラス変数を使った簡単なプログラムの例です。
public class StaticTest { //クラス変数「i」の宣言 public static int i; //インスタンス変数「a」の宣言 public int a; public StaticTest(){ i = i + 1; System.out.println("クラス変数は"+i); a = a + 1; System.out.println("インスタンス変数は"+a); } }
以下は、上記の「StaticTest」クラスを呼び出すメイン関数を持つクラスです。
public class MainTest { public static void main(String[] args) { //StaticTestクラスのオブジェクトを作成 StaticTest st1 = new StaticTest(); StaticTest st2 = new StaticTest(); StaticTest st3 = new StaticTest(); StaticTest st4 = new StaticTest(); } }
プログラムの実行結果になります。
クラス変数は1 インスタンス変数は1 クラス変数は2 インスタンス変数は1 クラス変数は3 インスタンス変数は1 クラス変数は4 インスタンス変数は1
以上の実行結果をみてわかるようにインスタンス変数は new されるたびに初期化されていますが、クラス変数は new されても初期化されません。
以下はクラスメソッドを使った簡単なプログラムの例です。
public class StaticTest { //クラスメソッドの宣言 public static void cMethod() { System.out.println("cMethod メソッドが呼び出されました。"); } //インスタンスメソッドの宣言 public void nMethod() { System.out.println("nMethod メソッドが呼び出されました。"); } }
以下は、上記の「StaticTest」クラスを呼び出すメインクラスです。
public class MainTest { public static void main(String[] args) { //クラスメソッドの呼び出し StaticTest.cMethod(); //インスタンスメソッドの呼び出し StaticTest st = new StaticTest(); st.nMethod(); } }
プログラムの実行結果になります。
cMethod メソッドが呼び出されました。 nMethod メソッドが呼び出されました。
以上の実行結果を見てわかるように、オブジェクトを作成しなくてもクラスメソッドを呼び出すことが出来ます。
クラスメソッド内では、「this」キーワードを記述することが出来ずコンパイルエラーになります。以下がその例です。
public class StaticTest { public String str = "String 型の変数です。"; //クラスメソッドの宣言 public static void cMethod() { System.out.println(this.str); System.out.println("cMethod メソッドが呼び出されました。"); } }以上のように記述しますと、6 行目でコンパイルエラーとなります。