final 到底有啥用,99% 的开发者可能只知道一半!

简介: 本场主题主要是了解final的各项功能,并且在面试中如何能够自信回答面试官询问final的用途。内容主要为以下五部分。1.自我经历2.final修饰变量3.final修饰类4.final的实际应用场景5.面试问答汇总

自我经历

 

在早晨面试官询问final在java中有什么作用时,我当时脑子一片空白,只能挤出一句,弄完修饰变量吧。看着面试官点了点头,但眉头却微微一皱,我就知道完了。

今天咱们就从头到尾搞清楚final的所有用途。当你下次遇到这个。问题自信到能现场开课,什么是final,简单来说,final是java中的一个关键字,表示不可变性,它可以用来修饰变量、方法和类,每种情况下都有不同的作用,让我们逐一拆解,看看final的真面目吧。

 

final修饰变量 

修饰基本数据类型

场景:你写了一段代码,定义了一些常量,比如圆周率π,这样PI的局就再也不能被修改。如果你尝试重新赋值,这就是final的威力保证了数据的不可变性。常量用法在开发中很常见,特别是那些一旦设定就不会变的值,比如配置信息,数学常量等。

 

修饰引用数据类型

场景修饰一个对象引用并用发动修饰引用类型时,对象的引用不可变,但对象本身可以变,虽然听起来有点绕,但是记住此例子list这个引用永远指向同一个对象,但这个对象里的内容是可以修改的。

 

final修饰方法

场景:你写了一个方法,特别想确保此类不能随便修改它的逻辑。为什么用final修饰方法,安全性:一些方法可能对类的核心功能至关重要,比如加密算法的实现重写可能导致安全问题。

 

性能优化

JVM可以对final方法进行优化,比如内联调用减少方法调用的开销。final修饰类,场景:你写了一个类,希望它的设计在任何情况下都保持不变。用final修饰类时,它就不能被继承了。

 

final修饰类 

为什么用final修饰类,确保类的不可变性。比如Java中的String类,就是final的,防止继承后破坏它的特性。

设计意图:有些类是为了提供工具方法的。比如java,lang,Math没有必要让别人继承,和static、abstract一起用的特殊情况。

 

final和static:

如果一个变量计时final又是static,它就成为了全局常量。这种写法常用在定义配置上,比如MAX_VALUE,整个应用程序都可以直接使用。

 

final和abstract:

你可能会问多项方法可以用发弄修饰吗,答案是不能。抽象方法要求子类必须重写,而final则不允许重写,这两者是互斥的。

 

final的实际应用场景 

看完理论知识,咱们来聊聊实际开发中final的常见用途,

 

定义常量:

比如某个系统的日志级别配置。

 

实现不可变类:

Java中的String类就是最经典的例子,不可变类在多线程环境下,特别有用,避免了修改带来的线程安全问题。

 

防止方法被滥用重写:

如果你的代码中有一些关键逻辑,比如银行账户的转账方法就可以使用final来保护。

 

传递安全的参数:

当一个方法不希望某个参数被修改时,可以用final修饰,这样可以明确表达方法的设计意图,增加代码的可读性。

 

面试问答汇总 

final关键字的作用是什么?

保证不可变性。修饰变量时值不能修改,修饰方法时不能重写,修饰类时不能继承。

 

final修饰对象引用时能修改对象的内容吗?

能。final只限制引用,不能重新指向新的对象。

 

为什么String是final的?

为了保证不可变性提升性能,且便于多线程安全操作。

 

final和static一起用有什么作用?

定义全局常量。

 

END:面试官问你final有什么用时,不要在只是简单地说,用来修饰变量了,从修饰变量方法到位,从实际应用场景到原理优化。今天的这篇文章完全可以让你自信,面对各种刁钻问题。想了解更多java面试技巧,记得关注我。欢迎关注微信公众号软件求生,获取更多技术干货。

相关文章
|
存储 SQL 缓存
Hadoop入门(一篇就够了)
Hadoop入门(一篇就够了)
43748 6
Hadoop入门(一篇就够了)
|
消息中间件 运维 负载均衡
【Kafka】Kafka 实现负载均衡与故障转移
【4月更文挑战第5天】【Kafka】Kafka 实现负载均衡与故障转移
|
9月前
|
持续交付 项目管理
阿里巴巴-云效
本文介绍了如何开通并使用云效平台进行项目管理与自动化部署。涵盖服务开通、需求管理、代码托管及流水线构建等步骤,帮助团队高效协作,实现代码自动发布流程的搭建与体验。
|
9月前
|
人工智能 监控 算法
别再做SEO了!2025最新GEO优化公司排行榜,AI时代流量密码全揭秘!
2025年,生成式AI重塑流量格局,GEO(生成式引擎优化)正取代传统SEO。用户从“搜索”转向“对话”,信息由AI主动推荐。GEO通过结构化内容、信任信号构建与多平台适配,让品牌成为AI眼中的“权威专家”。选择服务商需关注技术透明度、行业理解与定制化能力。未来属于能被AI理解和信任的品牌。
|
存储 人工智能 自然语言处理
大模型备案攻略—2025全网最新最详细解读版
随着AI技术的发展,大模型备案成为行业热点。本文详解备案所需具体条件与注意事项,涵盖模型功能、适用场景、研制情况、安全评估及备案材料等核心内容,帮助企业全面了解备案流程,规避合规风险,顺利推进产品上线。
|
SQL 算法 Java
适合自学的史上最强 Java 学习路线图分享
本路线图系统讲解Java从入门到进阶的学习路径,涵盖基础语法、面向对象编程、数据结构与算法、多线程、JVM原理、主流框架如Spring、数据库操作及项目实战,助你全面掌握Java开发技能,适合零基础及进阶学习。
1493 0
|
SQL 人工智能 关系型数据库
如何使用MySQL的事件调度器?
MySQL事件调度器允许在指定时间或间隔自动执行SQL语句,可用于数据清理、报告生成等任务。本文介绍其配置、创建、修改、删除事件的方法,并提供Java操作示例代码,帮助实现数据库定时任务管理。
552 0
|
机器学习/深度学习 人工智能 自然语言处理
【热门开源项目】阿里开源巨擘:Qwen-2 72B深度解析与推荐
在人工智能的浪潮中,开源模型如同璀璨的星辰,指引着开发者们探索未知的领域。而今天,我们将聚焦在阿里云推出的开源模型Qwen-2 72B上,从其项目介绍、技术特点、代码解析等多个角度,深入解析并推荐这一卓越的开源项目。
1086 1
|
安全 网络安全
gbase8a centos8(kylinv10)加载报登录 ftp失败报错530 Login incorrect 排查过程及解决办法
centos8(kylinv10)加载报登录 ftp失败报错530 Login incorrect 排查过程及解决办法
|
前端开发
【前端web入门第五天】03 清除默认样式与外边距问题【附综合案例产品卡片与新闻列表】
本文档详细介绍了CSS中清除默认样式的方法,包括清除内外边距、列表项目符号等;探讨了外边距的合并与塌陷问题及其解决策略;讲解了行内元素垂直边距的处理技巧;并介绍了圆角与盒子阴影效果的实现方法。最后通过产品卡片和新闻列表两个综合案例,展示了所学知识的实际应用。
637 11