Java中声明常量最标准的方式是public static final组合:static确保类加载时仅一份共享,final保证赋值后不可修改,二者缺一不可;必须全大写加下划线命名,且通过类名直接访问。

Java中声明常量最标准的方式就是 public static final 组合,它表示这个值属于整个类、全局唯一、且不可更改。
为什么必须是 static final?
单独用 final 只能保证“不可变”,但如果是实例变量,每个对象仍会有一份副本;加上 static 才真正实现“一份共享、全类通用”。两者合起来,才构成语言层面的常量语义。
-
static→ 内存中只存一份,在类加载时就分配,所有对象共用 -
final→ 赋值后无法再修改(基本类型值锁死,引用类型地址锁死) - 缺一不可:没有
static就不是全局常量;没有final就可能被意外修改
标准写法与访问方式
推荐使用 public static final 修饰,便于其他类直接访问。访问时统一用 类名.常量名,不依赖对象实例。
- 正确示例:
public static final int MAX_RETRY = 3; - 调用方式:
HttpConfig.MAX_RETRY(而不是new HttpConfig().MAX_RETRY) - 即使没写
public,只要在同包内也能访问;但跨包必须加public
命名规范必须遵守
Java约定俗成且编译器鼓励的命名方式是:全大写字母 + 下划线分隔单词。这是识别常量的视觉信号,也是代码可读性的基本要求。
- ✅ 正确:
DEFAULT_TIMEOUT、API_VERSION_2_1、IS_DEBUG_MODE - ❌ 错误:
defaultTimeout(像普通变量)、MaxRetry(驼峰)、max_retry(小写开头) - 注意:IDE 和检查工具(如 Sonar、Checkstyle)通常会对此报警告
初始化时机与常见位置
值必须在类加载阶段就确定下来,不能延迟到运行时才赋值。通常有三种安全初始化方式:
- 声明时直接赋值(最常用):
public static final String DB_URL = "jdbc:mysql://localhost:3306/app"; - 在静态代码块中赋值(适合需要多步计算或读配置的场景)
- 避免在构造方法或实例初始化块中初始化 —— 那属于实例行为,与
static冲突

















