Javaプログラミングでは、一度決めたら変更しない値を扱う場面がよくあります。そんなときに使うのが定数(final)です。この記事では、Javaの定数の基本から使い方・命名規則まで、初心者の方にもわかりやすく解説します。


Javaの定数とは?基本概念をわかりやすく解説
定数(Constant)とは、一度値を設定したら、プログラムの実行中に変更できない値のことです。Javaではfinalキーワードを使って定数を宣言します。

変数と定数の違い
| 項目 | 変数 | 定数(final) |
|---|---|---|
| 値の変更 | 何度でも可能 | 一度だけ(変更不可) |
| キーワード | なし | final |
| 命名規則 | camelCase | UPPER_SNAKE_CASE |
| 使用例 | ユーザー入力、カウンター | 円周率、消費税率、設定値 |
この記事のポイント
- 変数:鉛筆で書いたメモ(消して書き直せる)
- 定数:ボールペンで書いたメモ(消せない、変更不可)
定数はどう宣言する?基本的な使い方を解説
Javaで定数を宣言するには、finalキーワードをデータ型の前に付けます。
基本構文
final データ型 定数名 = 値;
定数の宣言例
public class ConstantExample {
public static void main(String[] args) {
// 定数の宣言と初期化
final double PI = 3.14159;
final int MAX_SIZE = 100;
final String APP_NAME = "MyApplication";
// 定数の使用
System.out.println("円周率: " + PI);
System.out.println("最大サイズ: " + MAX_SIZE);
System.out.println("アプリ名: " + APP_NAME);
// 円の面積を計算
int radius = 5;
double area = PI * radius * radius;
System.out.println("半径" + radius + "の円の面積: " + area);
}
}
実行結果:
円周率: 3.14159
最大サイズ: 100
アプリ名: MyApplication
半径5の円の面積: 78.53975
finalキーワードを使って定数を宣言すると、一度値を設定したら変更できなくなります。このコードでは、PI、MAX_SIZE、APP_NAMEを定数として宣言し、円の面積計算に使用しています。

定数の命名規則とは?
Javaの定数には、一般的に以下の命名規則が使われます。これを守ることで、変数と定数を一目で区別できます。
UPPER_SNAKE_CASE(アッパースネークケース)
// 良い例(UPPER_SNAKE_CASE)
final int MAX_VALUE = 100;
final double TAX_RATE = 0.10;
final String DATABASE_URL = "jdbc:mysql://localhost:3306/db";
final int BUFFER_SIZE = 1024;
// 悪い例(変数と区別がつかない)
final int maxValue = 100; // camelCaseは変数に見える
final double taxrate = 0.10; // 単語の区切りがわからない
final String DATABASEURL = "..."; // 単語の区切りがない
定数の命名規則は、すべて大文字とアンダースコアを使用するUPPER_SNAKE_CASEです。この規則を守ることで、コードを見ただけで定数と変数を区別できます。

定数を使うと何が良い?メリットを解説
なぜ変数ではなく定数を使うのか、そのメリットを具体例で見てみましょう。
メリット①: 値の変更を防ぐ
誤って値を変更してしまうバグを防げます。
public class PreventChange {
public static void main(String[] args) {
// 変数の場合(誤って変更してしまう可能性)
double taxRate = 0.10;
// ... 100行のコード ...
taxRate = 0.05; // 誤って書き換えてしまった!
// 定数の場合(変更しようとするとエラー)
final double TAX_RATE = 0.10;
// TAX_RATE = 0.05; // コンパイルエラー!安全!
}
}
定数を使うことで、誤って値を変更してしまうバグを防げます。このコードでは、変数の場合は誤って値を変更してしまう可能性がありますが、定数の場合はコンパイルエラーで防げます。
メリット②: マジックナンバーを防ぐ
マジックナンバーとは、コード中に突然現れる意味不明な数値のことです。定数を使うことで、値に意味を持たせられます。
// 0.10って何?意味がわからない...
double price = 1000;
double total = price * 1.10; // ← マジックナンバー
// 定数名で意味がわかる!
final double TAX_RATE = 0.10; // 消費税率10%
double price = 1000;
double total = price * (1 + TAX_RATE); // 税込価格
メリット③: 変更が一箇所で済む
値を変更する必要が出たとき、定数を使っていれば一箇所を変えるだけで全体に反映されます。
public class TaxCalculation {
// 定数を一箇所で定義(ここを変えれば全体に反映)
final static double TAX_RATE = 0.10; // 消費税が変わったらここだけ変更!
public static void main(String[] args) {
double[] prices = {100, 500, 1000, 2500};
System.out.println("=== 税込価格一覧 ===");
for (double price : prices) {
double taxIncluded = price * (1 + TAX_RATE);
System.out.println(price + "円 → " + taxIncluded + "円(税込)");
}
}
}
実行結果:
=== 税込価格一覧 ===
100.0円 → 110.0円(税込)
500.0円 → 550.0円(税込)
1000.0円 → 1100.0円(税込)
2500.0円 → 2750.0円(税込)
定数を使うことで、値を変更する必要が出たとき、一箇所を変えるだけで全体に反映されます。このコードでは、TAX_RATEを変更すれば、すべての税込価格計算に反映されます。
クラス定数(static final)とは?
複数のメソッドやクラス全体で使う定数は、static finalで宣言します。これをクラス定数と呼びます。
public class MathConstants {
// クラス定数(どこからでも参照可能)
public static final double PI = 3.14159265359;
public static final double E = 2.71828182846;
public static final int DEGREES_IN_CIRCLE = 360;
public static void main(String[] args) {
// クラス名.定数名 でアクセス
System.out.println("円周率: " + MathConstants.PI);
System.out.println("自然対数の底: " + MathConstants.E);
// 円周の計算
int radius = 10;
double circumference = 2 * PI * radius;
System.out.println("半径" + radius + "の円周: " + circumference);
}
}
実行結果:
円周率: 3.14159265359
自然対数の底: 2.71828182846
半径10の円周: 62.8318530718
static finalで宣言したクラス定数は、クラス名.定数名でアクセスできます。このコードでは、MathConstants.PIのようにクラス名を付けてアクセスしています。


よくある間違いと対処法
定数を使う際によく発生する間違いを紹介します。
間違い①: 定数を再代入しようとする
final int MAX_COUNT = 10;
MAX_COUNT = 20; // コンパイルエラー!
// エラー: cannot assign a value to final variable MAX_COUNT
final int MAX_COUNT = 10;
// MAX_COUNTは変更しない、読み取り専用として使う
System.out.println("最大値: " + MAX_COUNT);
間違い②: 定数を初期化せずに使う
final int LIMIT; // 初期化していない
System.out.println(LIMIT); // コンパイルエラー!
final int LIMIT = 100; // 宣言と同時に初期化
System.out.println(LIMIT);
間違い③: 命名規則を守らない
final double piValue = 3.14; // 変数と区別がつかない
final String appname = "MyApp"; // 定数だとわからない
final double PI_VALUE = 3.14; // 定数だとわかる
final String APP_NAME = "MyApp"; // 一目で定数と判別可能
実践例:設定値を定数で管理する方法
実務でよく使うパターンとして、アプリケーションの設定値を定数で管理する例を紹介します。
public class AppConfig {
// アプリケーション設定
public static final String APP_NAME = "MyJavaApp";
public static final String VERSION = "1.0.0";
// 数値設定
public static final int MAX_USERS = 1000;
public static final int SESSION_TIMEOUT = 30; // 分
// データベース設定
public static final String DB_HOST = "localhost";
public static final int DB_PORT = 3306;
public static void main(String[] args) {
System.out.println("=== アプリケーション情報 ===");
System.out.println("アプリ名: " + APP_NAME);
System.out.println("バージョン: " + VERSION);
System.out.println("最大ユーザー数: " + MAX_USERS);
System.out.println("セッションタイムアウト: " + SESSION_TIMEOUT + "分");
System.out.println("DB接続先: " + DB_HOST + ":" + DB_PORT);
}
}
実行結果:
=== アプリケーション情報 ===
アプリ名: MyJavaApp
バージョン: 1.0.0
最大ユーザー数: 1000
セッションタイムアウト: 30分
DB接続先: localhost:3306
アプリケーションの設定値を定数で管理することで、変更が必要な場合も一箇所を修正するだけで済みます。このコードでは、アプリ名、バージョン、最大ユーザー数などの設定値を定数として管理しています。

まとめ
この記事では、Javaの定数の基本について解説しました。定数はJavaプログラミングで頻繁に使う重要な概念ですので、しっかり理解しておきましょう。
この記事のポイント
- 定数はfinalキーワードで宣言し、値を変更できない
- 命名規則はUPPER_SNAKE_CASE(大文字とアンダースコア)
- 定数を使うとマジックナンバーを防げる
- クラス全体で使う定数はstatic finalで宣言
- 設定値や固定値は定数で管理すると保守性が上がる


定数はJavaプログラミングで頻繁に使う重要な概念です。しっかりマスターして、読みやすく保守しやすいコードを書けるようになりましょう!

