では今回は、前回の「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.PIは Circleクラスに属する定数。
→ クラスを「new」して作らなくても使える。finalがついているので、値を変更できません。staticがついているので、すべての場所から共通にアクセスできます。
4. 「Math.PI」と同じ仕組み!
Javaに最初からあるクラス Math にも、同じように定数が定義されています。
System.out.println(Math.PI); // 3.141592653589793
System.out.println(Math.E); // 2.718281828459045
JavaMath.PI も static 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_SALARYとBONUS_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👉 答え:エラーになる
解説:RATE は final なので、値を変更できません。
問題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. プログラミング的おすすめ使い方(ベストプラクティス)
- 意味のある名前を付ける
例:TAX_RATE,MAX_USER,DEFAULT_PORTなど - すべて大文字+アンダースコア にする
- クラスの先頭にまとめて定義 しておく(整理しやすい)
- 変更されない設定値(税率・上限・基準値など)には積極的に使う
- インスタンスごとに違う値が必要なら、
staticはつけない
