Javaでよく出てくる定数。
「値を変えたくない」「共通の設定値を1か所で管理したい」などの場面で使われます。
この記事では、finalを使って定数を定義する方法を具体例とともにわかりやすく解説します。
定数とは?
定数とは一度決めたら変わらない値のことです。 プログラムの実行中に変更されることはありません。
たとえば、次のようにソースコード内に直接数値を書いているケースを見たことがありませんか?
int price = 1000;
int total = price * 1.1; // ← 1.1 が何を意味しているのか不明
このように意味が分からない数値を直接書くことを「マジックナンバー」と呼びます。
マジックナンバーは後から見たときに「この1.1って何の値?」と分かりにくく 他の箇所で同じ数値を使うときに修正漏れや誤変更が起こる原因になります。
マジックナンバーを定数に置き換えた例
final double TAX_RATE = 1.1;
int price = 1000;
int total = price * TAX_RATE;
このように定数名に意味を込めてマジックナンバーを置き換えることで、 コードの意図が明確になり変更が必要になったときも1か所の修正で済みます。
つまり定数は「意味のある名前を付けた変更できない値」であり、 マジックナンバーを排除するための大切な仕組みです。
final:定数を定義
Javaでは定数を作るときにfinalキーワードを使います。
finalを付けた変数は一度だけ代入できます。- 再代入しようとするとコンパイルエラーになります。
final int MAX = 10;
MAX = 20; // final変数は再代入できません
このようにfinalを使うことで「変更されない安全な値」を保証できます。
定数の命名規則
定数名にはすべて大文字を使い、単語の区切りにアンダースコア(_)を入れるのが一般的です。
final double PI = 3.14159;
final String APP_NAME = "MyApp";
参照型の定数
finalはプリミティブ型だけでなく、オブジェクト型や配列にも使えます。
final List<String> COLORS = new ArrayList();
COLORS.add("Red"); // OK:中身の変更は可能
COLORS = new ArrayList(); // NG:参照先の変更は不可
「参照先は変えられないけど中身は変えられる」点に注意しましょう。
static final:クラス定数
クラス全体で共有したい定数はstatic finalとして定義します。 これにより、インスタンスを作らなくても定数を参照できます。
public class Config {
public static final int MAX_USER = 100;
public static final String VERSION = "1.0.0";
}
この場合、定数は次のように呼び出せます。
System.out.println(Config.MAX_USER); // 100
System.out.println(Config.VERSION); // 1.0.0
アプリ全体の設定値や共通値を管理するクラスにまとめておくと便利です。
blank final:1回だけ代入できるfinal
初期値を指定せずに宣言したfinal変数は、blank finalと呼ばれます。 この場合、コンストラクタや初期化ブロックで1回だけ代入できます。
class Player {
final int id;
Player(int id) {
this.id = id; // コンストラクタで初期化
}
}
代入し忘れるとコンパイルエラーになります。
まとめ:定数を使うとコードが安全でわかりやすくなる
- finalを使うと値を一度しか代入できない。
- 定数名は大文字+アンダースコアで書く。
- クラス全体で使うなら
static final。 - 参照型finalは「中身は変更OK」「参照先は変更NG」。
- blank finalは後で1回だけ代入できる。
定数を使うことで、意図しない値の変更を防ぎ、 チーム開発でも安全で読みやすいコードを書けるようになります。


コメント