JavaA2Z

KAB-studio > プログラミング > JavaA2Z > staticフィールドとは

staticフィールド

日本語 静的フィールド
英語 static field
ふりがな すたてぃっくふぃーるど
フリガナ スタティックフィールド

解説

staticで修飾されたフィールド
 
static フィールド;」のように、フィールド宣言の先頭にstaticが付けられたフィールド
staticフィールドは、インスタンスを作らなくても存在する。感覚としては「クラス内に存在するフィールド」と言える。
ただし、クラスは「インスタンスではない」ため、「クラスという苗字(ネームスペース)」を持つ「グローバル変数」と考えた方がいいだろう。
 
staticフィールドはインスタンスに関係なく存在するため、「複数のインスタンスから勝手に変えられる」可能性があり、使用することは非常に危険である。
publicなstaticフィールドは論外。あらゆるクラスからアクセスされ、いつ値が変化するのか把握することが非常に困難である。
privateなstaticフィールドも、同クラスの複数のインスタンスからにアクセスできてしまうことを考えると作るべきではない。
 
唯一の使用機会はpublic static finalフィールドとして「定数値」フィールド宣言する方法である。
この場合、フィールドの値は変更されないため、複数のインスタンスからアクセスされても問題ない。staticフィールドはこのためにあると考えてもいいだろう。

参考サイト

  • (参考サイトはありません)

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
public class Sample
{
    /**
    *   staticフィールド。
    */
    static int staticField;

    /**
    *   非staticフィールド。
    */
    int nonStaticField;

    /**
    *   public static finalフィールド。
    */
    public static final int CONSTANT_DATA = 100;

    // staticメソッド。
    public static void main( String[] args )
    {
        // staticメソッドからstaticフィールドにアクセスします。
        staticField = 100;
        System.out.println( staticField );
        // 100

        // staticメソッドから非staticフィールドにはアクセスできません。
        // nonStaticField = 100;
        // コンパイルエラー:
        // static 参照は非 static フィールド nonStaticField ではできません。

        // 非staticメソッドから呼び出してみます。
        Sample sample = new Sample();
        sample.callingNonStaticMethod();

        // 外からアクセスする際には、クラス名を使ってアクセスします。
        Sample.staticField = 100;
        // このように、インスタンスを作らなくてもアクセスできるのが
        // staticフィールドです。

        // ちなみにインスタンスを通してstaticフィールドにアクセスすると
        // エラーにはなりませんが警告にはなります。
        sample.staticField = 100;
        // 警告:
        // The static field Sample.staticField should be accessed in a static way

        // staticフィールドは、public static finalフィールドとして
        // のみ使用しましょう。
        System.out.println( CONSTANT_DATA );
        // 100
    }

    /**
    *   非staticメソッド(呼び出す方)。
    */
    private void callingNonStaticMethod()
    {
        // staticメソッドからstaticフィールドにアクセスします。
        staticField = 100;
        System.out.println( staticField );
        // 100

        // staticメソッドから非staticフィールドにアクセスします。
        nonStaticField = 200;
        System.out.println( nonStaticField );
        // 200
    }
}
// Sample.java
public class Sample
{
    /**
    *   staticフィールド。
    */
    static int staticField;

    /**
    *   非staticフィールド。
    */
    int nonStaticField;

    /**
    *   public static finalフィールド。
    */
    public static final int CONSTANT_DATA = 100;

    // staticメソッド。
    public static void main( String[] args )
    {
        // staticメソッドからstaticフィールドにアクセスします。
        staticField = 100;
        System.out.println( staticField );
        // 100

        // staticメソッドから非staticフィールドにはアクセスできません。
        // nonStaticField = 100;
        // コンパイルエラー:
        // static 参照は非 static フィールド nonStaticField ではできません。

        // 非staticメソッドから呼び出してみます。
        Sample sample = new Sample();
        sample.callingNonStaticMethod();

        // 外からアクセスする際には、クラス名を使ってアクセスします。
        Sample.staticField = 100;
        // このように、インスタンスを作らなくてもアクセスできるのが
        // staticフィールドです。

        // ちなみにインスタンスを通してstaticフィールドにアクセスすると
        // エラーにはなりませんが警告にはなります。
        sample.staticField = 100;
        // 警告:
        // The static field Sample.staticField should be accessed in a static way

        // staticフィールドは、public static finalフィールドとして
        // のみ使用しましょう。
        System.out.println( CONSTANT_DATA );
        // 100
    }

    /**
    *   非staticメソッド(呼び出す方)。
    */
    private void callingNonStaticMethod()
    {
        // staticメソッドからstaticフィールドにアクセスします。
        staticField = 100;
        System.out.println( staticField );
        // 100

        // staticメソッドから非staticフィールドにアクセスします。
        nonStaticField = 200;
        System.out.println( nonStaticField );
        // 200
    }
}

この単語を含むページ

「みだし」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2006/02/13
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。