Java通过public static final声明类级别字段实现全局常量效果:public确保跨包访问,static保证类共享唯一份,final强制编译期不可变;命名全大写加下划线;应统一置于专用常量类中,有限取值优先用enum。

Java 中没有真正意义上的“全局常量”,但通过 public static final 组合声明类级别字段,就能实现等效效果:一份共享、不可修改、可直接通过类名访问。
必须用 public static final 三者齐备
缺一不可,各自承担关键职责:
- public:确保跨包可访问,避免因封装过度导致调用方绕路或暴露内部细节
- static:让字段属于类而非实例,保证整个 JVM 中只有一份,不随对象创建而重复
- final:强制编译期绑定值,杜绝运行时篡改;对引用类型还要求对象本身不可变(如用 String、Integer、List.of() 等)
命名必须全大写 + 下划线分隔
这是 Java 社区广泛遵循的规范,一眼可识别为常量。例如:
- public static final int DEFAULT_TIMEOUT_MS = 5000;
- public static final String API_BASE_URL = "https://api.example.com";
- public static final List
SUPPORTED_LANGUAGES = List.of("zh", "en", "ja");
注意:仅用 final 的局部变量、或内容可变的 final List(如 new ArrayList()),不符合常量定义标准,不能套用此命名风格。
统一放在专用常量类中
禁止把常量散落在业务类里。新建一个纯静态工具类,不提供构造器,也不被实例化:
- 类名建议带明确语义,如 AppConfig、ApiConstants、DbConfig
- 内部只放 public static final 字段,不混入方法或逻辑
- 使用时严格通过 类名.常量名 访问,例如 AppConfig.ENABLE_CACHE
有限取值优先用 enum 替代字符串常量
当常量代表固定集合(如环境类型、消息状态、协议版本),enum 更安全、更清晰:
- 天然不可变、类型安全、支持方法扩展
- 避免字符串拼写错误,也便于 IDE 提示和重构
- 例如:public enum Env { DEV, TEST, PROD },比 public static final String ENV_DEV = "dev" 更推荐
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











