final关键字

!!! note 目录

final关键字

  • 不可继承类: 使用 “final” 关键字修饰的类表示该类不能被继承。

  • 不可覆盖方法: 在父类中使用 “final” 关键字修饰的方法表示该方法不能被子类覆盖(即不能被重写)。

  • 不可变变量: 使用 “final” 关键字声明的变量是不可变的,一旦赋值后就不能再修改其值。这在创建常量时很有用。

    • final修饰的实例变量,必须在构造方法执行完之前手动上赋值,不能采用系统默认值。
    • 常量定义规范: public static final 数据类型 常量名 = 常量值;
  • 不可变对象:在Java中,final修饰的引用变量意味着该变量不能再指向其他对象,但并不意味着其所指向的对象是不可变的。即使引用变量是final的,对象本身的状态仍然可以改变。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// 不可继承类
final class FinalClass {
// 该类的内容
}

// 试图继承不可继承类会导致编译错误
// class SubClass extends FinalClass {}

class Parent {
// 不可覆盖的方法
public final void finalMethod() {
// 方法的内容
}
}

class Child extends Parent {
// 尝试覆盖父类的final方法会导致编译错误
// public void finalMethod() {}
}

public class Main {
// 不可变变量 - 常量
public static final int CONSTANT = 10;

// final修饰的实例变量,在构造方法中手动赋值
private final int instanceVariable;

// 构造方法
public Main(int value) {
instanceVariable = value;
}

// 不可变对象
public static void main(String[] args) {
final StringBuilder sb = new StringBuilder("Hello");
// 尝试改变引用的指向会导致编译错误
// sb = new StringBuilder("World");

// 尽管引用是final的,但对象本身的状态可以改变
sb.append(" World");
System.out.println(sb.toString()); // 输出:Hello World
}
}