Menu
CoddyTech

常量(static final)

本课属于 Coddy Java 学习旅程的“面向对象编程”单元。第 18 课,共 87 课。

将 static 和 final 结合起来,就能创建一个常量,也就是属于类且永远不会改变的值。这是在 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 这样的值,它是一个任何代码都可以使用的公共静态常量。

为什么要使用常量,而不是硬编码的值?如果你在代码中到处写 4,之后又需要把它改成 6,就得找到并更新每一处。使用 MAX_PLAYERS 这样的常量,只需在一处修改即可。

常量也能让代码更易读,MAX_PLAYERS 比一个神秘的 4 更清楚。

challenge icon

挑战

简单

让我们创建一个 MathConstants 工具类,用来存储重要的数学常量,并创建一个 CircleCalculator,使用这些常量进行计算。

你将创建两个文件来组织代码:

  • MathConstants.java:创建一个类,使用 public static final 字段存储数学常量:
    • PI,值为 3.14159
    • E(欧拉数),值为 2.71828
    • GOLDEN_RATIO,值为 1.61803
    记得使用 UPPER_SNAKE_CASE 命名常量!
  • Main.java:使用这些常量进行圆的计算。你会接收一个半径作为输入,并打印三行:
    • 圆的面积:Area: [value]
    • 圆的周长:Circumference: [value]
    • 按黄金比例缩放后的直径:Golden Diameter: [value]

计算公式如下:

  • 面积 = PI * radius * radius
  • 周长 = 2 * PI * radius
  • 黄金直径 = 2 * radius * GOLDEN_RATIO

你会收到一个输入:半径(double)。

使用 String.format("%.2f", value) 将所有输出值格式化为 2 位小数。通过类名访问常量,例如 MathConstants.PI。

亲手试试

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) 设置格式
        // 输出格式:
        // 面积:[value]
        // Circumference: [value]
        // Golden Diameter: [value]
        
    }
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: Java 在线编译器