阅读量:0
在Java中,final
关键字用于限制类、方法或变量的行为
- 用于类:当一个类被声明为
final
时,表示该类不能被继承。这通常用于保护类的设计,确保不会被其它类覆盖。
public final class MyFinalClass { // 类的实现 }
- 用于方法:当方法声明为
final
时,表示该方法不能被子类覆盖(即子类不能重新实现这个方法)。这有助于确保方法的行为在整个类继承体系中保持一致,子类不能对其进行修改。
public class MyBaseClass { public final void myFinalMethod() { // 方法的实现 } }
用于变量:
- 当声明基本数据类型的变量时,
final
意味着该变量是一个常量,其值在初始化后不能被改变。
java`public class MyClass { public final int MY_CONSTANT = 10; // 类的其它部分 }` * 当声明引用类型的变量时,`final`意味着该变量的引用不能指向其它对象,但引用的对象的内容仍然可以改变。
java
public class MyClass { public final MyOtherClass myFinalObject = new MyOtherClass(); // 类的其它部分 }
- 当声明基本数据类型的变量时,
注意事项:
final
变量必须在声明时或构造函数中被初始化,因为它们不能被重新赋值。- 如果
final
变量是类的成员变量,并且类有一个可访问的构造函数,那么final
变量必须在构造函数中被初始化。 final
方法不能被子类覆盖,但子类可以继承其实现。
使用场景:
- 当你希望确保某个类不被继承时,可以使用
final
关键字。 - 当你希望确保某个方法的行为在整个类继承体系中保持一致,并且不希望子类对其进行修改时,可以使用
final
关键字。 - 当你希望定义一个常量时,可以使用
final
关键字(对于基本数据类型)或将其引用设置为final
(对于引用类型)。
- 当你希望确保某个类不被继承时,可以使用
示例:
public class MyClass { public final int CONSTANT = 100; public final void myFinalMethod() { System.out.println("This is a final method."); } public static void main(String[] args) { MyClass obj = new MyClass(); System.out.println(obj.CONSTANT); // 输出 100 // obj.CONSTANT = 200; // 编译错误,因为 CONSTANT 是 final 的 obj.myFinalMethod(); // 输出 "This is a final method." // obj.myFinalMethod = () -> System.out.println("I am not a final method."); // 编译错误,因为 myFinalMethod 是 final 的 } }
在这个示例中,CONSTANT
变量和myFinalMethod
方法都被声明为final
,因此它们的行为不能被修改。