Java | static final を使った定数の定義

Java Java
スポンサーリンク

では今回は、前回の「final(変わらない変数)」の発展編として、
static final を使った定数の定義」を、初心者向けにやさしく説明します。


1. 「static final」とは?

static final は、
「すべての場所から共通で使える定数」を作るためのキーワードです。


「final」と「static」の違い

修飾子意味説明
final値を変えられない一度値を代入したら変更不可
staticクラス全体で共有するどのインスタンス(オブジェクト)からも共通で使える

つまり、
static final をセットで使うと 👇

「クラス全体で共有される、一度だけ決まる定数

を作れます。


2. 基本の書き方

class クラス名 {
    static final データ型 定数名 = 値;
}
Java

例:

class Circle {
    static final double PI = 3.14159;  // 定数PIを定義
}
Java

この PI は、Circleクラスのどこでも使えます。


3. 他の場所から使うとき

class Circle {
    static final double PI = 3.14159;
}

class Main {
    public static void main(String[] args) {
        double r = 5.0;
        double area = r * r * Circle.PI; // ← クラス名.定数名 で使う!
        System.out.println("半径5の円の面積は " + area);
    }
}
Java

▶️ 実行結果:

半径5の円の面積は 78.53975

解説

  • Circle.PICircleクラスに属する定数
    → クラスを「new」して作らなくても使える。
  • final がついているので、値を変更できません。
  • static がついているので、すべての場所から共通にアクセスできます。

4. 「Math.PI」と同じ仕組み!

Javaに最初からあるクラス Math にも、同じように定数が定義されています。

System.out.println(Math.PI);   // 3.141592653589793
System.out.println(Math.E);    // 2.718281828459045
Java

Math.PIstatic final 定数なんです。
つまり、自分でも「自分専用の定数」を作れるわけです!


5. 実用例:会社の給与計算で使う定数

class Salary {
    static final int BASE_SALARY = 200000;  // 基本給
    static final double BONUS_RATE = 0.2;   // ボーナス率

    static double calcBonus() {
        return BASE_SALARY * BONUS_RATE;
    }
}

class Main {
    public static void main(String[] args) {
        System.out.println("ボーナスは " + Salary.calcBonus() + " 円です");
    }
}
Java

▶️ 実行結果:

ボーナスは 40000.0 円です

解説

  • BASE_SALARYBONUS_RATE は変更されない値なので static final
  • Salary クラスのどこからでも、Salary.BASE_SALARY のように使える。
  • どの社員でも「共通の基本給」や「共通のボーナス率」を持たせられる。

6. 書き方ルール(命名規則)

ルール内容
すべて大文字定数だと分かりやすくするMAX_VALUE, TAX_RATE
単語の区切りは _複数単語をつなぐときDEFAULT_PORT, BASE_SALARY
必ず初期値を代入final は1回しか代入できないstatic final int LIMIT = 10;

7. 練習問題(3問)

問題1

次のコードの出力結果を答えましょう。

class App {
    static final int LIMIT = 5;
}

class Main {
    public static void main(String[] args) {
        System.out.println(App.LIMIT);
    }
}
Java

👉 答え:

5

問題2

次のコードはコンパイルできるでしょうか?

class Config {
    static final double RATE = 0.1;
}

class Main {
    public static void main(String[] args) {
        Config.RATE = 0.2;
    }
}
Java

👉 答え:エラーになる
解説:RATEfinal なので、値を変更できません。


問題3

定数の使い方として正しいのはどれ?

A. final double PI = 3.14;
B. static final double PI = 3.14;
C. double PI = 3.14;

👉 答え:B
解説:他のクラスからも共通で使いたいなら static final がベスト。


8. まとめ

用語意味
final一度だけ値を代入できる(変更禁止)
staticクラス全体で共有できる
static final全員が使える定数(変更不可・共有)
使い方クラス名.定数名 でアクセス(例:Math.PI

9. プログラミング的おすすめ使い方(ベストプラクティス)

  1. 意味のある名前を付ける
    例:TAX_RATE, MAX_USER, DEFAULT_PORT など
  2. すべて大文字+アンダースコア にする
  3. クラスの先頭にまとめて定義 しておく(整理しやすい)
  4. 変更されない設定値(税率・上限・基準値など)には積極的に使う
  5. インスタンスごとに違う値が必要なら、static はつけない
タイトルとURLをコピーしました