# final 相關

`final` 是 Java 中的一个关键字，用于修饰变量、方法和类，表示其值或状态不可改变。使用 `final` 可以提高程序的安全性、可读性和性能，通常在以下情况下使用：

1. 声明不可变常量

可以使用 `final` 关键字来声明不可变常量，一旦声明后，该常量的值就不能再被修改。这样可以避免程序中的常量被误修改，提高程序的健壮性。

```Java
public static final int MAX_NUM = 100;

```

2. 防止继承和重写

可以使用 `final` 关键字来修饰一个类，表示该类不可被继承。同时，也可以修饰一个方法，表示该方法不可被子类重写。这样可以避免在继承和多态的过程中产生不可预知的行为，提高程序的稳定性和可维护性。

```Java
public final class MyClass {
    // 类定义
}

public class MySubClass extends MyClass {
    // 编译错误，无法继承 final 类
}

public class MyClass {
    public final void myMethod() {
        // 方法定义
    }
}

public class MySubClass extends MyClass {
    public void myMethod() {
        // 编译错误，无法重写 final 方法
    }
}

```

3. 确保线程安全

可以使用 `final` 关键字来修饰一个变量，表示该变量只能被赋值一次，并且在多线程环境下是线程安全的。这样可以避免在多线程环境下出现竞争和数据不一致的问题，提高程序的并发性和稳定性。

```Java
public class MyClass {
    private final int num;

    public MyClass(int num) {
        this.num = num;
    }

    public int getNum() {
        return num;
    }
}

```

4. 优化代码性能

可以使用 `final` 关键字来修饰一个变量，表示该变量的值在赋值后不再改变，并且该变量在运行时会被优化为常量，从而提高程序的性能。

```Java
public void myMethod(final int num) {
    // 方法定义
}

```

在上述示例中，我们使用 `final` 关键字来修饰了常量、类、方法和变量，分别达到了不同的目的。使用 `final` 可以提高程序的健壮性、稳定性、可读性和性能，是 Java 编程中的重要特性之一。