Java 中 final 关键字的作用是什么?(超详细)
在 Java 中,final
关键字可以用于修饰变量、方法和类。它的作用有以下几个方面:
-
变量被声明为
final
后,该变量的值不能被修改。 也就是说,它是一个常量。如果试图对一个final
变量重新赋值,会导致编译错误。例如:final int a = 10; // a = 20; // 编译错误:无法为最终变量 a 分配值
-
方法被声明为
final
后,该方法不能被子类重写。 也就是说,它是一个不可变的方法。如果子类试图重写一个final
方法,会导致编译错误。例如:public class Parent { public final void print() { System.out.println("Hello, World!"); } } public class Child extends Parent { // @Override // 编译错误:print() in Child cannot override print() in Parent public void print() { System.out.println("Hello, Java!"); } }
-
类被声明为
final
后,该类不能被继承。 也就是说,它是一个不可继承的类。如果试图从一个final
类派生出子类,会导致编译错误。例如:final public class FinalClass { // ... } // public class ChildClass extends FinalClass {} // 编译错误:无法从最终 FinalClass 进行继承
-
final
关键字还可以用于实现安全发布和线程安全。
在 Java 中,对象的创建和初始化过程可能会受到指令重排序等因素的影响,导致对象的状态无法正确发布。使用 final
关键字可以解决这个问题,因为在对象的构造方法中对 final
变量的写入操作会在对象的构造方法完成之前完成。因此,将一个对象的引用声明为 final
,可以保证该对象被正确地发布出去。
另外,final
关键字还可以用于实现线程安全。如果将一个变量声明为 final
,则多个线程之间共享该变量时,不需要进行同步,因为该变量的值不可修改。
总结
总之,final
关键字可以用于实现不可变性、不可变方法、不可继承类、安全发布和线程安全等功能。