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置于它的定义之前)。就表明了你不打算继承该类,而且也不允许别人这样做。换句话说,出于某种考虑,你对该类的设计永不需要做任何变动,或者出于安全考虑,你不希望它有子类。
热水有益于身体健康
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!