java中常量指编译期确定且运行中绝不改变的值,须用static final修饰、全大写加下划线命名,如pi、default_timeout_ms;局部final变量或内容可变的final对象不属此类。

Java 中常量命名统一使用全大写字母,单词间用下划线 _ 分隔,且必须用 static final 修饰(基本类型或不可变引用类型)。
哪些变量算“常量”?
只有编译期确定、运行中绝不改变的值才应定义为常量。常见包括:
- 数学常量:如
PI、E - 配置标识:如
DEFAULT_TIMEOUT_MS、MAX_RETRY_COUNT - 状态码或协议字面量:如
HTTP_STATUS_OK、TCP_HEADER_LENGTH - 枚举类外的固定字符串/数字:如
DB_URL_PATTERN、VERSION_2_0
注意:仅被赋值一次的局部变量、或虽用 final 但内容可变的对象(如 final List<string> list = new ArrayList()</string>),不属于规范意义上的常量,不应套用全大写命名。
命名必须全大写 + 下划线
每个单词全部大写,用下划线清晰分隔语义单元,不省略冠词或介词(除非是广泛接受的缩写):
- ✅ 正确:
MIN_BUFFER_SIZE、IS_DEBUG_ENABLED、API_VERSION_V2 - ❌ 错误:
minBufferSize(驼峰,属变量命名)、Min_Buffer_Size(首字母大写不合规)、MAXBUFFERLENGTH(无下划线,可读性差)
缩写词也需大写并独立成段,如 XML_PARSER_FACTORY、URL_ENCODING_CHARSET,避免 XmlParserFactory 或 urlEncodingCharset。
作用域与声明位置有讲究
常量优先定义在类级别,用 public static final 暴露给外部(若需共享),或 private static final 限定在当前类内使用:
- 接口中定义的字段默认是
public static final,仍建议显式写出,增强可读性 - 避免在方法内部声明静态常量(语法不允许),也不要在循环里重复初始化“伪常量”
- 字符串常量推荐提取为
private static final String,而非直接写死在代码中(如日志模板、SQL 片段)
工具与检查不能少
IDE(如 IntelliJ)和静态检查工具(如 Checkstyle、SonarQube)可自动识别非常量命名、缺失 static final 修饰、或命名不符合 ^[A-Z][A-Z0-9_]*$ 模式的情况。建议在构建流程中启用 ConstantName 规则,把命名问题挡在提交前。
不复杂但容易忽略。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











