104 「static修羅道」 Step04 解答例


AppConstants.java

public class AppConstants {

  // アプリケーションで使用される定数は、public static final で定義する

  // サービス名(文字列の定数)
  public static final String SERVICE_NAME = "MyApp";

  // 税率(数値の定数)
  public static final double TAX_RATE = 0.1;

  // 最大ログイン試行回数(整数の定数)
  public static final int MAX_LOGIN_ATTEMPTS = 3;

  // コンストラクタは private にしてインスタンス化を禁止(常套テクニック)
  private AppConstants() {
    // 何もしない
  }
}

Main.java

public class Main {
  public static void main(String[] args) {
    // AppConstants は new しなくても使える
    System.out.println("サービス名: " + AppConstants.SERVICE_NAME);
    System.out.println("税率: " + AppConstants.TAX_RATE);
    System.out.println("最大ログイン試行回数: " + AppConstants.MAX_LOGIN_ATTEMPTS);
  }
}

実行結果

サービス名: MyApp
税率: 0.1
最大ログイン試行回数: 3

解説

なぜ定数に public static final を使うのか?

  1. public … 他のクラスからアクセスできるようにするため
  2. static … インスタンスを作らずに使えるようにするため
  3. final … 値を変更不可にするため(定数化)

この3つを組み合わせることで、**「どこからでも読める・1つだけある・変わらない値」**として使えます。


定数名はすべて大文字+アンダースコア(Javaの慣習)

public static final int MAX_LOGIN_ATTEMPTS = 3;
  • Javaでは「定数」は 全大文字+アンダースコア区切りが定番です
  • 値が変更されないことが 名前の見た目から伝わる ため、可読性が高まります

インスタンス化を防ぐテクニック

private AppConstants() {}

このようにコンストラクタを private にすることで、new AppConstants() を禁止できます。
ユーティリティクラスや定数クラスでは常套手段です。


まとめ

  • public static final は定数の三種の神器(アクセス可/共有/不変)
  • 定数は設計上「意味のある値」に名前を与え、意図を明示する
  • AppConstants のような「定数だけをまとめたクラス」は現場でもよく使われる
  • private コンストラクタでインスタンス化を防止するのもプロっぽい技法

104 ステップアップ問題 「static修羅道」


Just Keep Typing, Baby!では、この「static修羅道」でつまづいた人向けの解説をしています。こちらもぜひ!

// tesh:
// 不安なまま前に進んでも、いずれ戻される。今だ。