- 用于修饰变量(成员变量、局部变量和方法参数)
- 成员变量:当
final
修饰成员变量时,该变量必须在声明时或者在构造函数中初始化,且初始化后不能再被修改。例如:class MyClass { // 声明一个final成员变量 private final int myFinalVariable; public MyClass(int value) { // 在构造函数中初始化final成员变量 myFinalVariable = value; } // 以下这种修改final成员变量的方式是不允许的 // public void modifyFinalVariable() { // myFinalVariable = 10; // } }
- 局部变量:对于局部变量,
final
同样限制其不可被重新赋值。例如:public void myMethod() { final int localFinalVariable = 5; // 不能重新赋值,下面这行代码会导致编译错误 // localFinalVariable = 10; }
- 方法参数:当
final
修饰方法参数时,在方法体内部不能重新赋值该参数。例如:public void anotherMethod(final int finalParam) { // 不能重新赋值,下面这行代码会导致编译错误 // finalParam = 20; System.out.println(finalParam); }
- 成员变量:当
- 用于修饰方法
- 当
final
修饰方法时,该方法不能被子类重写。这在设计类的继承结构时非常有用,可以确保某些方法的行为在子类中不会被改变。例如:class ParentClass { // 声明一个final方法 public final void finalMethod() { System.out.println("This is a final method in the parent class."); } } class ChildClass extends ParentClass { // 尝试重写final方法,会导致编译错误 // public void finalMethod() { // System.out.println("This is an attempt to override the final method."); // } }
- 当
- 用于修饰类
- 当
final
修饰类时,该类不能被继承。这通常用于设计一些不希望被扩展的类,例如,某些工具类或者具有固定行为的类。例如:// 声明一个final类 final class FinalClass { // 类的成员和方法 } // 尝试继承final类,会导致编译错误 // class SubClass extends FinalClass { // }
- 当
final
关键字在Java中的主要作用是提供不可变性和限制继承/重写,有助于增强代码的稳定性、安全性和可维护性。在设计代码架构时,合理地使用final
可以更好地控制代码的行为和数据的变化。