JavaA2Z

KAB-studio > プログラミング > JavaA2Z > static finalとは

static final

日本語 静的最終
英語 static final
ふりがな すたてぃっくふぁいなる
フリガナ スタティックファイナル

解説

staticfinalのふたつの予約語で修飾されたフィールド
フィールドに「static final フィールド= 初期値;」の形式で使用する。

このstatic finalフィールドは、staticフィールドのため自クラスインスタンスを作らずに使用できる。加えて、final変数のため値が変更できない。
以上の特性のため、定数宣言する場合に使用される。
 
static finalフィールドは、リテラルの代わりとしてよく使用される。
プログラム上に直接書かれたリテラルは、修正が難しく可読性が下がる。
たとえば「System.out.println( 20 );」と書かれている場合に、この「20」という値の意味が一見分からない。また、プログラム上に複数の「20」がある場合、それぞれの値が同じ意味を持つのか、それとも別の意味の「20」なのかが判別できない。
そのため、この「20」という定数を含むプログラムが読み解きにくくなったり、この値を変更する際に注意が必要となってしまう。

そのため、リテラルはstatic finalフィールドとして宣言し、それを利用することが推奨される。
そうすることで、フィールドの名前から定数の意味が分かるため、可読性が上がる。また、定数値の変更はフィールド宣言の一箇所えば済むため、修正が容易になる。
 
通常、static finalフィールド変数名は単語間を_で継なぎ、さらに全て大文字で記述する。
static finalフィールドクラスの中でのみ使用する場合にはprivateフィールドに、外からも使用できるようにする場合にはpublicフィールドにした方が良いだろう。
ただし、publicフィールドとする場合、それぞれのクラスに作ると検索や修正が面倒になるため、通常は専用のクラスをひとつ作り、その中にまとめてpublic static finalフィールド宣言する方法をとる。
 
慣例的に「static」「final」の順番で書かれることが多いが、「final」「static」でも同様に機能する。

参考サイト

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

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

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

// Sample.java
public class Sample
{
    /**
     * static finalフィールド。
     * アクセス修飾子は付けていませんが、通常、
     * クラス内でのみ使用するときはprivateフィールド、
     * 他のクラスから使う時にはpublicフィールドにします。
     * finalで定数値化されているので、publicでも問題
     * ありません。ただ、publicフィールドの場合には
     * 定数値を入れる専用のクラスを作り、その中にまとめた方が
     * いいでしょう。
     */
    static final String SYSTEM_NAME = "JavaA2Z";

    public static void main( String[] args )
    {
        // 定数値SYSTEM_NAMEを使用します。
        System.out.println( SYSTEM_NAME );
        // JavaA2Z

        // staticフィールドなので、staticメソッドからも
        // 普通のメソッドからも使えます。

        // finalなので変更できません。
        // ※コンパイルエラーの例
        // SYSTEM_NAME = "あいうえお";
        // ※エラーメッセージ
        // final フィールド Sample.SYSTEM_NAME には代入できません
        // ※コンパイルエラーの例ここまで

        // SYSTEM_NAMEはStringクラスの参照型変数なので、
        // 参照が指し示す先のインスタンスの中身は
        // 変えうることができます。ただし、この場合は
        // Stringクラスなので、Stringクラスの性質として
        // 中身を変更できない(「インスタンスは不変」ということ)
        // ため、定数値として使用できます。
        // 逆に言えば、そういうクラスを使用すべきということです。
    }

    // static finalではなく、逆のfinal staticでも同じです。
    final static int MAX = 300;
}
// Sample.java
public class Sample
{
    /**
     * static finalフィールド。
     * アクセス修飾子は付けていませんが、通常、
     * クラス内でのみ使用するときはprivateフィールド、
     * 他のクラスから使う時にはpublicフィールドにします。
     * finalで定数値化されているので、publicでも問題
     * ありません。ただ、publicフィールドの場合には
     * 定数値を入れる専用のクラスを作り、その中にまとめた方が
     * いいでしょう。
     */
    static final String SYSTEM_NAME = "JavaA2Z";

    public static void main( String[] args )
    {
        // 定数値SYSTEM_NAMEを使用します。
        System.out.println( SYSTEM_NAME );
        // JavaA2Z

        // staticフィールドなので、staticメソッドからも
        // 普通のメソッドからも使えます。

        // finalなので変更できません。
        // ※コンパイルエラーの例
        // SYSTEM_NAME = "あいうえお";
        // ※エラーメッセージ
        // final フィールド Sample.SYSTEM_NAME には代入できません
        // ※コンパイルエラーの例ここまで

        // SYSTEM_NAMEはStringクラスの参照型変数なので、
        // 参照が指し示す先のインスタンスの中身は
        // 変えうることができます。ただし、この場合は
        // Stringクラスなので、Stringクラスの性質として
        // 中身を変更できない(「インスタンスは不変」ということ)
        // ため、定数値として使用できます。
        // 逆に言えば、そういうクラスを使用すべきということです。
    }

    // static finalではなく、逆のfinal staticでも同じです。
    final static int MAX = 300;
}

この単語を含むページ

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

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