final关键字

final关键字用在不同的地方意义是不同的,但是通常来说:“这东东是不能被修改的”。你可能有两个理由为了不变化:设计或效率?因为这两个原因十分不同,因此你可能会误用final关键字

有三个地方可以使用final关键字:data,methods,classes

final data

许多程序语言有方法可以告诉编译器这一片的数据是“constant”,用在以下两个地方

  • 它可以是一个永远不变的编译常量
  • 在运行时是一个你不想改变的数值初始化

final令一个引用变为常量,一旦引用被一个对象给初始化,它将永远无法在其他对象中被改变。然而,对象本身是可以改变的。

而static+final修饰的变量需要大写+下划线命名法分割

java有Blank finals

当创建了final变量的时候,可以先不给初值,而在使用之前用构造函数进行初始化,编译器会确保这一步。

final argument

传参

传入的参数是不能被改变的呢

final methods

最终的方法

  • 出于设计考虑,防止继承的类去修改这个方法,确保这个方法在继承后依旧保持且无法被override
  • 第二个原因是为了效率,在Java早期实现中,如果将一个方法指明为final,就是同意编译器将针对该方法的所有调用都转为?内嵌调用?。当编译器发现一个final方法调用命令时,它会根据自己的谨慎判断,跳过插入程序代码这种正常方式而执行方法调用机制(将参数压入栈,跳至方法代码处执行,然后跳回并清理栈中的参数,处理返回值),并且以方法体中的实际代码的副本来替代方法调用,这将消除方法调用的开销。当然,如果一个方法很大,你的程序代码就会膨胀,因而可能看不到内嵌带来的任何性能提高。因为,所带来的的性能提高会因为花费于方法内的时间量而被缩减。

final and private

类中所有的private方法都隐式地指定为final.因为无法调用private方法,所以无法覆盖它。

可以给private方法增加 final,但实际没有任何意义。

final class

当将某个类的整体定义为final时,(通过将关键字final置于它的定义之前)。就表明了你不打算继承该类,而且也不允许别人这样做。换句话说,出于某种考虑,你对该类的设计永不需要做任何变动,或者出于安全考虑,你不希望它有子类。

posted @   红烧鲈鱼  阅读(48)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示