Menu
Coddy logo textTech

定数 (static final)

CoddyのJavaジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 18/87。

staticfinalを組み合わせることで、定数(クラスに属し、決して変更できない値)が作成されます。これはJavaで定数を定義する標準的な方法です。

public class GameSettings {
    public static final int MAX_PLAYERS = 4;
    public static final double GRAVITY = 9.81;
    public static final String GAME_TITLE = "Space Adventure";
}

慣習として、定数名は通常の変数と区別するために UPPER_SNAKE_CASE を使用します。これらは static かつ final であるため、クラス名を通じてアクセスし、その値は決して変更されないことが保証されています。

System.out.println(GameSettings.MAX_PLAYERS);  // 4
// GameSettings.MAX_PLAYERS = 8;  // エラー!変更できません

定数は通常、アプリケーション全体で共有されることを意図しているため、public と宣言されます。Math.PI のような値を考えてみてください。これは、どのコードからでも使用できる public static final な定数です。

なぜハードコードされた値の代わりに定数を使用するのでしょうか?コードの至る所に 4 と記述し、後でそれを 6 に変更する必要が生じた場合、すべての箇所を探して更新しなければなりません。MAX_PLAYERS のような定数を使用すれば、1か所を変更するだけで済みます。

定数を使うと、コードの可読性も高まります。謎の 4 よりも MAX_PLAYERS の方が分かりやすいでしょう。

challenge icon

チャレンジ

簡単

重要な数学的数値を定数として保持する MathConstants ユーティリティと、それらの定数を使用して計算を行う CircleCalculator を作成しましょう。

コードを整理するために、2つのファイルを作成します:

  • MathConstants.java: public static final フィールドを使用して数学定数を保持するクラスを作成します:
    • PI 値は 3.14159
    • E (ネイピア数) 値は 2.71828
    • GOLDEN_RATIO 値は 1.61803
    定数名には UPPER_SNAKE_CASE を使用することを忘れないでください!
  • Main.java: 定数を使用して円の計算を行います。入力として半径を受け取り、次の3行を出力します:
    • 円の面積: Area: [value]
    • 円の周囲の長さ: Circumference: [value]
    • 黄金比でスケーリングされた直径: Golden Diameter: [value]

計算式は以下の通りです:

  • Area = PI * radius * radius
  • Circumference = 2 * PI * radius
  • Golden Diameter = 2 * radius * GOLDEN_RATIO

入力として1つの値、半径 (double) を受け取ります。

すべての出力値は String.format("%.2f", value) を使用して、小数点以下2桁にフォーマットしてください。定数には MathConstants.PI のようにクラス名を通じてアクセスします。

チートシート

staticfinal を組み合わせることで、定数(クラスに属し、決して変更できない値)が作成されます。

public class GameSettings {
    public static final int MAX_PLAYERS = 4;
    public static final double GRAVITY = 9.81;
    public static final String GAME_TITLE = "Space Adventure";
}

慣習として、定数名には UPPER_SNAKE_CASE を使用します。定数にはクラス名を通じてアクセスします:

System.out.println(GameSettings.MAX_PLAYERS);  // 4
// GameSettings.MAX_PLAYERS = 8;  // エラー!変更できません

定数は通常、アプリケーション全体で共有するために public として宣言されます。ハードコードされた値を意味のある名前に置き換えることで、コードの保守性と可読性が向上します。

自分で試してみよう

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double radius = scanner.nextDouble();
        
        // TODO: MathConstants.PI を使用して面積を計算してください
        // 公式: PI * radius * radius
        
        // TODO: MathConstants.PI を使用して円周を計算してください
        // 公式: 2 * PI * radius
        
        // TODO: MathConstants.GOLDEN_RATIO を使用して黄金直径を計算してください
        // 公式: 2 * radius * GOLDEN_RATIO
        
        // TODO: 結果を小数点以下2桁にフォーマットして出力してください
        // フォーマットには String.format("%.2f", value) を使用してください
        // 出力形式:
        // Area: [value]
        // Circumference: [value]
        // Golden Diameter: [value]
        
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

オブジェクト指向プログラミングのすべてのレッスン