final关键字
目录
在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
,该参数在方法体内不能被重新赋值。