Skip to content

Java final 关键字

在Java中,final关键字用于表示常量。它可以用于变量、方法和类。

一旦任何实体(变量、方法或类)被声明为final,它只能被赋值一次。也就是说,

  • 最终变量不能重新初始化为另一个值
  • 最终方法不能被覆盖
  • 最终类不能被扩展

1. Java final 变量

在Java中,我们不能改变最终变量的值。例如,

class Main {
  public static void main(String[] args) {

    // 创建一个最终变量
    final int AGE = 32;

    // 尝试改变最终变量的值
    AGE = 45;
    System.out.println("年龄:" + AGE);
  }
}

在上面的程序中,我们创建了一个名为age的最终变量。然后我们尝试改变最终变量的值。

当我们运行程序时,将会得到以下编译错误信息。

无法为最终变量AGE分配值
    AGE = 45;
    ^

注意:建议在Java中使用大写字母来声明最终变量。


2. Java final 方法

在学习最终方法和最终类之前,请确保您了解Java继承

在Java中,子类无法覆盖最终方法。例如,

class FinalDemo {
    // 创建一个最终方法
    public final void display() {
      System.out.println("这是一个最终方法。");
    }
}

class Main extends FinalDemo {
  // 尝试覆盖最终方法
  public final void display() {
    System.out.println("最终方法被覆盖。");
  }

  public static void main(String[] args) {
    Main obj = new Main();
    obj.display();
  }
}

在上面的例子中,我们在FinalDemo类中创建了一个名为display()的最终方法。在这里,Main类继承了FinalDemo类。

我们试图在Main类中覆盖最终方法。当我们运行程序时,将会得到以下编译错误信息。

 display() in Main cannot override display() in FinalDemo
  public final void display() {
                    ^
  overridden method is final

3. Java final 类

在Java中,最终类无法被其他类继承。例如,

// 创建一个最终类
final class FinalClass {
  public void display() {
    System.out.println("这是一个最终方法。");
  }
}

// 尝试继承最终类
class Main extends FinalClass {
  public  void display() {
    System.out.println("最终方法被覆盖。");
  }

  public static void main(String[] args) {
    Main obj = new Main();
    obj.display();
  }
}

在上面的例子中,我们创建了一个名为FinalClass的最终类。在这里,我们试图通过Main类来继承最终类。

当我们运行程序时,将会得到以下编译错误信息。

无法从最终类FinalClass继承
class Main extends FinalClass {
                   ^