Java里的final关键字

本文详细探讨了Java中的final关键字,包括它用于修饰类、方法、变量和参数的四种用法,以及final的注意事项。文章指出final可以提高代码的安全性和效率,但也可能限制了类的继承和方法的覆盖。此外,文章还提到了final、finally和finalize的区别,强调了finally在异常处理中的作用,而finalize方法在Java 9中已被弃用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

final 是 Java 中一个常见关键字,表示的意思也很简单,就是“这个东西不能变”。

许多程序设计语言都有自己的办法告诉编译器某个数据是“常数”。
常数主要应用于下述两个方面:
(1) 编译期常数,它永远不会改变
(2) 在运行期初始化的一个值,不希望它发生变化
对于编译期的常数,编译器(程序)可将常数值“封装”到需要的计算过程里。也就是说,计算可在编译期间提前执行,从而节省运行时的一些开销。在 Java 中,这些形式的常数必须属于基本数据类型
( Primitives),而且要用 final 关键字进行表达。在对这样的一个常数进行定义的时候,必须给出一个值。
无论 static 还是 final 字段,都只能存储一个数据,而且不得改变。
若随同对象句柄使用 final,而不是基本数据类型,它的含义就稍微让人有点儿迷糊了。对于基本数据类型, final 会将值变成一个常数;但对于对象句柄, final 会将句柄变成一个常数。进行声明时,必须将句柄初始化到一个具体的对象。而且永远不能将句柄变成指向另一个对象。然而,对象本身是可以修改的。 Java对此未提供任何手段,可将一个对象直接变成一个常数(但是,我们可自己编写一个类,使其中的对象具有“常数”效果)。这一限制也适用于数组,它也属于对象。

final 的用法有以下 4 种

  1. 修饰类
  2. 修饰方法
  3. 修饰变量
  4. 修饰参数

1.修饰类

/*
 * 被 final 修饰的类不允许被继承,表示此类设计的很完美,不需要被修改和扩展
 */
final class Actor {
   
   

}

如果说整个类都是 final(在它的定义前冠以 final 关键字),就表明自己不希望从这个类继承,或者不允许其他任何人采取这种操作。换言之,出于这样那样的原因,该类肯定不需要进行任何改变;或者出于安全方面的理由,禁止进行子类化(子类处理)。

除此以外,我们或许还考虑到执行效率的问题,并想确保涉及这个类各对象的所有行动都要尽可能地有效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小山研磨代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值