Okapi Project

static(すたてぃっく)

バージョン
2004 年 01月 05 日 Ver.1.0
作成者
H.Izumi ( Xware )

目的

クラスに関連つけられているメソッド・変数を使いたい!

staticってなに?

 クラスではオブジェクトに関連つけられていないメソッド・変数を持つことが出来ます。このクラスに関連つけられている変数をクラス変数(class variable)、メソッドをクラスメソッド(class method)と呼びます。そして、これらを宣言・定義するときに使われるのが、static という修飾子です。

staticの説明

クラス変数を宣言する。

class クラス名{
  static 型名 クラス変数名; }
クラス名
任意のクラス名を記述します。
型名
任意で型名を記述します。
クラス変数
任意でクラス変数名を記述します。

クラスメソッドを宣言する。

アクセス修飾子 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」キーワードの使用

クラスメソッド内では、「this」キーワードを記述することが出来ずコンパイルエラーになります。以下がその例です。

public class StaticTest {
    public String str = "String 型の変数です。";

    //クラスメソッドの宣言    
    public static void cMethod() {
        System.out.println(this.str);
        System.out.println("cMethod メソッドが呼び出されました。");
    }
}
以上のように記述しますと、6 行目でコンパイルエラーとなります。

関連


Copyright © 2003 - 2006 Okapi Project All Rights Reserved.