#pragma twice

KAB-studio > プログラミング > Javaのオブジェクト指向入門 > 4. staticはどこにある? > 4.1 staticフィールドは初めからある
 
前のページへつぎ

4.1 staticフィールドは初めからある

del.icio.us 登録する はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数 livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数 Yahoo!ブックマーク 詳細を表示 users RSSに登録
更新日: 2008/03/31
動作確認環境:Windows XP Professional SP2, Java SE 5

 これまで紹介してきたフィールドやメソッドは、インスタンスの中に作られました。
 ところが、これから紹介するstaticフィールドやstaticメソッドは、ちょっと違います。

staticフィールド

 フィールドを作るときに「static」を付けると、そのフィールドはインスタンスを作らなくても最初からある、という特殊なフィールドになります。

// HasStaticFieldRunner.java

/**
 * staticフィールド1つだけ持つクラス。
 */
class HasStaticField
{
    // int型変数のstatic フィールドdataを定義します。
    static int data;
}

/**
 * 実行用クラス。このクラスを実行してください。
 */
class HasStaticFieldRunner
{
    public static void main( String[] args )
    {
        // staticフィールドに数値を入れます。
        HasStaticField.data = 100;
        // staticフィールドから値を取り出して出力します。
        System.out.println( HasStaticField.data );
        // 出力結果:
        // 100
    }
}
// HasStaticFieldRunner.java
/**
 * staticフィールド1つだけ持つクラス。
 */
class HasStaticField
{
	// int型変数のstatic フィールドdataを定義します。
	static int data;
}
/**
 * 実行用クラス。このクラスを実行してください。
 */
class HasStaticFieldRunner
{
	public static void main( String[] args )
	{
		// staticフィールドに数値を入れます。
		HasStaticField.data = 100;
		// staticフィールドから値を取り出して出力します。
		System.out.println( HasStaticField.data );
		// 出力結果:
		// 100
	}
}

 HasStaticFieldクラスはフィールドを1つ持っているクラスです。
 でも、そのフィールドの前には「static」(スタティック)が付いています。

/**
 * staticフィールド1つだけ持つクラス。
 */
class HasStaticField
{
    // int型変数のstatic フィールドdataを定義します。
    static int data;
}
/**
 * staticフィールド1つだけ持つクラス。
 */
class HasStaticField
{
	// int型変数のstatic フィールドdataを定義します。
	static int data;
}

 staticを付けたフィールドは、初めからフィールドが作られています
 つまりインスタンスを作らなくても使えます
 インスタンスを作らなくても使えるため、使う時には「クラス.フィールド」という形で使用します。

        // staticフィールドに数値を入れます。
        HasStaticField.data = 100;
        // staticフィールドから値を取り出して出力します。
        System.out.println( HasStaticField.data );
		// staticフィールドに数値を入れます。
		HasStaticField.data = 100;
		// staticフィールドから値を取り出して出力します。
		System.out.println( HasStaticField.data );

 普通のフィールドはインスタンスの中にあったので、そのインスタンスを指定するの参照が必要でした。
 でもstaticフィールドはインスタンスの中にはないので、その指定が必要ありません。なので参照や参照型変数を使わず、クラス名を使って指定するわけです。

静的領域

 staticフィールドはインスタンスの中に作られません。
 じゃあどこに作られるの? というと、「静的領域」というものが作られ、その中にstaticなフィールドが作られます。

 静的領域は、初めは存在していないのですが、最初にクラスを使う時――たとえばstaticフィールドを使おうとした時や、インスタンスを作ろうとしたとき――に、自動的に作られます。
 一度作られたら、もう静的領域はそのままです。増えることも、なくなることもありません。なので、その中にあるstaticフィールドもずっと使えます。
 staticフィールドを使うと、インスタンスの数に関係ないデータを保存することができます。たとえばインスタンスの数を保存する時には、staticフィールドが役立つでしょう。

4.1 staticフィールドは初めからある
このページは、Java言語を用いたオブジェクト指向プログラミングのチュートリアル解説を行う「Javaのオブジェクト指向入門」の一ページです。
詳しい説明は「Javaのオブジェクト指向入門」目次をご覧ください。