在 Java 中,final 关键字有多种用途,具体取决于它应用的上下文。下面是 final 在不同情况下的含义,以及它对类成员变量的影响:

1. final 修饰类

当一个类被声明为 final 时,这个类不能被继承。例如:

final class A {
    // Class code
}

在这个例子中,A 类是 final 的,因此其他任何类都不能继承它。

2. final 修饰方法

当一个方法被声明为 final 时,这个方法不能被子类重写。例如:

class A {
    public final void fun() {
        System.out.println("test");
    }
}

在这个例子中,fun() 方法是 final 的,因此子类不能重写它。

3. final 修饰变量

当一个变量被声明为 final 时,这个变量的值在初始化之后就不能再被修改了。

a. final 修饰基本数据类型的变量

如果是基本数据类型,final 变量的值一旦赋值后就不能改变。例如:

final int x = 10;
x = 20;  // 编译错误

在这个例子中,xfinal 的,赋值后不能再被修改。

b. final 修饰引用类型的变量

如果 final 修饰的是引用类型(例如对象、数组),那么引用的地址不能改变,但对象的内部状态可以改变。例如:

final StringBuilder sb = new StringBuilder("Hello");
sb.append(" World!");  // 允许,修改对象内容
sb = new StringBuilder("New Object");  // 编译错误,不能修改引用

在这个例子中,sbfinal 的,因此我们不能再将 sb 指向一个新的 StringBuilder 对象,但可以修改 sb 引用的对象的内容。

总结:

  • final:不能被继承。
  • final 方法:不能被子类重写。
  • final 变量:初始化后不能再改变值。对于引用类型,引用不能改变,但对象内部状态可以修改。