Java 中的 final 关键字有哪些用法?

86 阅读2分钟

Java 中的 final 关键字有哪些用法?

在Java中,final关键字是一个非常重要的修饰符,它可以用来修饰类、方法和变量。final关键字的主要目的是控制变更:它可以防止内容的修改、继承以及重写。以下是final关键字的具体使用方法和含义:

1. 修饰变量

  • 修饰基本数据类型变量:当final修饰一个基本数据类型变量时,表示这个变量的值一旦被赋值之后就不能改变。这样的变量通常被称为常量

    final int MAX_VALUE = 10;
    
  • 修饰引用类型变量:当final修饰一个引用类型变量时,表示这个引用变量所引用的地址值不能改变,即不能再指向另一个对象,但是所指向的对象的内容是可以改变的。

    final MyClass myClass = new MyClass();
    myClass.setValue(10); // 可以
    // myClass = new MyClass(); // 编译错误,不能改变myClass的引用
    

2. 修饰方法

final修饰一个方法时,这个方法不能被子类覆盖(Override),但是它可以被子类继承。这通常是为了防止某个关键方法被子类改变其行为。

class SuperClass {
    public final void show() {
        System.out.println("这是一个final方法。");
    }
}
​
class SubClass extends SuperClass {
    // 试图重写show方法会导致编译错误
    // @Override
    // public void show() {
    //     System.out.println("试图重写final方法。");
    // }
}

3. 修饰类

final修饰一个类时,这个类不能被继承。这主要是为了保证类的安全性,防止其他类改变其关键行为。

final class FinalClass {
    // 类的内容
}
​
// 以下类定义将导致编译错误,因为FinalClass不能被继承
// class SubClass extends FinalClass {
// }

使用场景和好处

  • 提高性能:对于编译器优化来说,final变量是一个很好的目标,因为它们的值不会改变。
  • 设计安全和清晰的API:通过使用final类和方法,可以让其他开发者清楚地知道哪些部分是稳定的,不应该被改变或扩展。
  • 线程安全:在并发编程中,final变量可以确保变量在初始化后不会被更改,这使得final变量自然地具有线程安全性。

总结来说,final关键字在Java中提供了一种机制,通过限制修改来增加代码的可读性、安全性和效率。