在Java中如何使用常量_final关键字的特点与使用方式

final是表示不可变性的修饰符,public static final才构成常量;修饰变量时值或引用不可再赋值,修饰方法时禁止重写,修饰类时禁止继承。

在Java中,final 关键字不是用来定义“常量”的专用语法,而是用来表示“不可变性”的修饰符;我们常说的“常量”,其实是用 public static final 修饰的变量,它具备类级别、全局可见、运行期不可修改三个关键特征。

final 修饰变量:值不可再赋值

当 final 修饰一个变量(包括基本类型和引用类型)时,该变量只能被赋值一次,之后不能再修改其值。

  • 对于基本类型(如 int、boolean),final 保证的是数值本身不可变;
  • 对于引用类型(如 String、ArrayList),final 保证的是引用地址不可变,但对象内部状态仍可改变(例如 final List list = new ArrayList(); 可以 add 元素,但不能 list = new ArrayList();)。

final 修饰方法:禁止子类重写

用 final 修饰的方法不能被子类覆盖(override),常用于防止核心逻辑被意外修改,或作为性能优化(JVM 可能内联该方法)。

  • 常见于工具类中的工具方法,比如 java.lang.Math 中的很多方法;
  • 注意:final 方法仍可被继承,只是不能被重写。

final 修饰类:禁止被继承

被 final 修饰的类无法被其他类继承,典型例子是 String、Integer 等包装类和重要系统类。

  • 设计意图是确保类的行为完全可控、不可扩展;
  • 如果某个类的语义上“不应当被继承”(比如封装了敏感逻辑或依赖固定结构),可考虑声明为 final。

常量的标准写法:public static final

Java 中约定俗成的“常量”写法是三者组合:

  • public:让常量可被其他类访问;
  • static:属于类而非实例,节省内存,直接通过类名访问(如 Math.PI);
  • final:确保值初始化后不再变化

命名习惯:全部大写,单词间用下划线分隔,例如:public static final int MAX_RETRY = 3;

基本上就这些。final 的本质是“不可变承诺”,用对地方能让代码更安全、更易理解,但也不必滥用——比如局部变量加 final 多用于 lambda 或明确表达意图,并非强制要求。