Java中的final关键字

在Java面向对象编程中,final 关键字是一个非常重要的修饰符,它可以用于类、方法和变量。使用 final 的效果取决于它修饰的对象类型。使用 final 关键字可以使代码更加安全和清晰,但也需要谨慎使用,以避免过度限制类的扩展性和灵活性。

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() 用于垃圾回收过程。

推荐阅读
cjavapy编程之路首页