Java中final关键字的学习

BingBing-8888 / 2024-08-28 / 原文

final关键字


目录
  • final关键字
      • 1. 修饰变量
      • 2. 修饰方法
      • 3. 修饰类
      • 4. 修饰方法参数
      • 注意事项
      • 示例

在Java编程语言中,final关键字是一个非常重要的概念,它用于表示一个变量、方法或类是不可变的或不能被进一步修改的。以下是final关键字的几种常见用法:

1. 修饰变量

  • 常量final修饰的变量称为常量,一旦赋值后就不能被改变。这适用于基本数据类型和对象引用。对于基本数据类型,final保证了变量的值不可变;对于对象引用,final保证了引用不能指向另一个对象,但对象本身的状态(即对象的属性)是可以改变的。
  • 成员变量:对于类的成员变量,如果声明为final,则必须在构造方法或初始化块中对其进行初始化,之后就不能再被修改。
  • 局部变量final也可以修饰局部变量,一旦赋值后,该变量的值就不能被改变。

2. 修饰方法

  • 使用final修饰的方法表示该方法不能被子类重写。如果尝试在子类中重写该方法,编译器将报错。这有助于保护方法不被意外修改,确保方法的稳定性和可预测性。

3. 修饰类

  • 当一个类被声明为final时,表示该类不能被继承。这通常用于那些不希望被扩展的类,如工具类、枚举类型等。如果尝试继承一个final类,编译器将报错。

4. 修饰方法参数

  • 在方法定义中,final也可以用来修饰参数。这表示在方法体内,参数的值(对于基本数据类型)或引用(对于对象类型)不能被改变。这有助于保证方法参数的不可变性,防止在方法执行过程中被意外修改。

注意事项

  • final修饰的变量必须在声明时或构造方法中初始化(对于成员变量),否则编译器会报错。
  • final修饰的引用类型变量不能指向另一个对象,但对象本身的状态(即对象的属性)是可以修改的。
  • final修饰的方法不能被重写,但可以被重载。
  • final修饰的类不能被继承,但类中的成员变量和方法(除了private方法,它们隐式地被指定为final)可以被继承并访问。

示例

public final class FinalClass {
    private final int number = 10; // final成员变量,必须在声明时或构造方法中初始化

    public final void show() { // final方法,不能被重写
        System.out.println("This is a final method.");
    }

    public void anotherMethod(final String param) { // final参数,参数值在方法体内不能改变
        // param = "another value"; // 这将导致编译错误
        System.out.println(param);
    }
}

public class Test {
    public static void main(String[] args) {
        FinalClass fc = new FinalClass();
        fc.show(); // 调用final方法
        fc.anotherMethod("Hello, final parameter!"); // 调用带有final参数的方法
    }
}

在这个示例中,FinalClass是一个final类,不能被继承。它有一个final成员变量number和一个final方法show()anotherMethod()方法接受一个final参数param,该参数在方法体内不能被重新赋值。