1、修饰类
当类用final修饰时,表明这个类不能被继承。当我们出于安全或某种情况考虑,不想让你写的class被继承,就可以考虑使用final。
final class Cat{ public Cat(){ } }
2、修饰方法
使用final关键字修饰方法,其它类就不可以修改该方法。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。要想方法在子类中不被覆盖,就是使用final关键字修饰方法。类的private方法会隐式地被指定为final方法。
3、修饰变量
final关键字修饰变量是用得比较多的情况,对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。
class Cat{ private final int age = 0; public Cat(){ age = 1; final Object obj = new Object(); obj = new Object(); } }
注意:修饰的变量是类或引用类型变量时,要注意只是这个变量指向对象不能更改,但对象中内容是可以修改的。
4、特性和使用场景
对于变量,final 确保一旦赋值后就不会改变,这在创建常量时特别有用。在多线程环境下,final 变量可以安全地被多个线程读取,因为它们不会改变。对于类和方法,使用 final 可以明确表明它们不应该被继承或重写,这有助于保持代码的清晰和维护性。将类或方法声明为 final 可能会对性能产生一定影响,因为这意味着编译器无法对其进行某些优化,如方法内联。另外,final 与 finally 和 finalize() 是完全不同的概念;finally 用于异常处理,finalize() 用于垃圾回收过程。