阅读量:69
在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,因此它们的行为不能被修改。