从源码学习final的使用

从源码学习final的使用

final的作用

​ final字面意思,意为最终的、不可变的。在Java中,final可以用来修饰类、方法和变量,可以分别起到不同的作用。

  1. final修饰类:表示该类不可以被继承;
  2. final修饰方法:表示该方法不能被子类重写;
  3. final修饰变量:表示该变量一旦被赋值后,其值不可被修改;

​ 上面的概念我们都很清楚,那具体到应用场景,有该如何使用呢?下面集合JDK的源码,看看final在源码中的使用;

final修饰类

​ final修饰类的主要应用场景是为了阻止类的继承。当我们希望某个类不能被其他类所继承时,就可以使用final修饰该类。

​ 需要注意的是,final修饰类只能阻止类的继承,对于类中的属性和方法,可以根据需要使用final修饰来决定是否允许修改。

在这里插入图片描述

​ 如上图中的String类,就被设计成了final类,可以看到它没有任何派生子类,这正是final关键字的效果。

对于一些不可变的类,比如String类,我们希望其不被修改,可以使用final修饰该类,确保其不被继承和修改

​ 需要注意的是,将类设计为final类需要权衡设计的灵活性和扩展性。如果在将来可能需要对该类进行修改或者扩展,将其设计为final类可能会限制其可扩展性。因此,设计时需要根据具体需求和设计目标来决定是否将类设计为final类。

final修饰方法

​ final修饰方法,可以防止方法被子类重写。从而确保方法的逻辑和实现不会被修改,以保证代码的安全性和稳定性。

在这里插入图片描述

​ 如HashMap中的removeNode方法,就是final修饰的。我们可以看到它是没有任何子类重写的。

​ 那么用final修饰方法,有哪些场景可以考虑呢?

  1. 安全性:通过将方法声明为final,防止子类重写该方法,确保方法的逻辑和实现不会被修改。
  2. 性能优化:final方法在编译时会被直接绑定到调用的地方,而不是在运行时进行动态绑定,这样可以提高方法的执行效率,减少方法的调用开销。

​ 需要注意,final修饰方法并不是必要的,只有在确有需要限制方法覆盖或提高性能等情况下才使用。在一般情况下,不需要过度使用final修饰方法。

final修饰变量

​ final修饰变量,表示其值不可变化。

​ 当变量时基本数据类型时,表示一旦被赋值,则变量值不会再变化;

​ 当变量是引用数据类型时,表示一旦被绑定某个对象,则无法再重新绑定其他对象,但是对象的属性是可以变化的。

​ final用来修饰变量,在源码中还是很常见的:

  1. 可以修饰类静态常量;

    在这里插入图片描述

  2. 可以修饰不可变变量;

    在这里插入图片描述

  3. 可以修饰方法的入参;

    在这里插入图片描述

​ final用来修饰变量一般有如下场景:

  1. 实现不可变性:将一个变量声明为final,意味着该变量的值不能被修改。这在需要保证对象的状态不可变时非常有用,例如在多线程环境下,可以避免线程安全问题。

  2. 性能优化:final变量在编译时会被直接替换为对应的值,而不是在运行时进行计算。这样可以减少运行时的计算开销,提高程序的性能。

  3. 常量定义:使用final修饰的变量通常被视为常量,命名时常使用全大写。这样也可以提高代码的可读性。

的计算开销,提高程序的性能。

  1. 常量定义:使用final修饰的变量通常被视为常量,命名时常使用全大写。这样也可以提高代码的可读性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值