90%开发者都分不清!final、finally、finalize的终极区别揭秘

简介: 小米,29岁程序员,分享Java面试中常见的final、finally、finalize区别。final确保不可变性,finally保证代码总会执行,finalize在对象被垃圾回收前做清理工作。通过故事讲解,帮助理解三者在Java资源管理中的不同角色。



大家好,我是小米,29岁,热爱编程和分享的小太阳!最近有个朋友小王社招面试了Java开发岗,回来一脸懵圈跟我诉苦:

“面试官问我final、finally、finalize的区别,我竟然语无伦次!你说这仨到底有啥关系啊?就不能换点简单的问题吗?”

哈哈,其实这题还挺常见的!不少开发者刚接触Java时都容易混淆它们。为了不让更多人踩坑,今天小米带你通过一个故事彻底搞懂这三者的区别。

故事开头:Java村的三兄弟

从前有个Java村,住着三兄弟:finalfinallyfinalize。他们看起来名字很像,但性格却截然不同。

老大:final(终结的权威)

老大 final 是个很有原则的人,他的名言是:

“一旦决定,就再也不能改变!”

在Java里,final有三个主要用法:

1、修饰变量:让变量成为常量,值一旦赋予,就不能再改变。

2、修饰方法:禁止子类覆盖这个方法。

3、修饰类:不让任何类继承这个类。

所以,final是个坚定果敢的人,凡是他决定的,都是不可修改的!

老二:finally(后勤小能手)

老二 finally 是个热心肠,专门负责善后工作。他经常说:

“无论发生什么,我都得收拾残局!”

在Java中,finally常用于处理异常(exception)时的善后工作:

1、与try-catch配合:不管有没有异常,finally块的代码都会执行。

2、常见用途:比如关闭文件、释放数据库连接等资源。

3、注意:虽然finally几乎总会执行,但有一种特殊情况会打破规则——那就是System.exit()直接终止程序时,finally块的代码就不会执行了。

老三:finalize(孤独的收尾者)

最小的弟弟 finalize 有些孤僻,不常露面。他主要负责处理垃圾回收前的清理工作

1、属于Object类的方法:finalize是java.lang.Object类的方法,任何类都可以重写它。

2、触发时机:当垃圾回收器(GC)准备销毁一个对象时,会调用对象的finalize()方法,给予它最后的告别机会。

3、注意事项

  • finalize方法不可靠,因为垃圾回收器的运行时机无法预测。
  • Java 9开始,finalize()已被标记为过时方法,建议使用try-with-resources或显式关闭资源代替。

总结:三兄弟的不同之处

面试中的“小陷阱”

如果面试官问你:这三者有何共同点?别慌!他们的名字虽相似,但并无直接关系。正确答案可以是:

  • 名字里都有"final"。
  • 都与Java语言的资源管理相关,但应用场景完全不同。

总结:牢记关键点

  • final:是为了"不可改变";
  • finally:是为了"总要执行";
  • finalize:是为了"回收前清理"。

END

希望今天的分享能帮助大家彻底搞懂这道经典面试题!如果觉得有用,记得点赞+收藏+转发哦!

有其他Java问题也可以留言告诉我,小米随时在线,陪你一起成长~

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号软件求生,获取更多技术干货!

相关文章
|
4天前
|
人工智能 自动驾驶 大数据
预告 | 阿里云邀您参加2024中国生成式AI大会上海站,马上报名
大会以“智能跃进 创造无限”为主题,设置主会场峰会、分会场研讨会及展览区,聚焦大模型、AI Infra等热点议题。阿里云智算集群产品解决方案负责人丛培岩将出席并发表《高性能智算集群设计思考与实践》主题演讲。观众报名现已开放。
|
21天前
|
存储 人工智能 弹性计算
阿里云弹性计算_加速计算专场精华概览 | 2024云栖大会回顾
2024年9月19-21日,2024云栖大会在杭州云栖小镇举行,阿里云智能集团资深技术专家、异构计算产品技术负责人王超等多位产品、技术专家,共同带来了题为《AI Infra的前沿技术与应用实践》的专场session。本次专场重点介绍了阿里云AI Infra 产品架构与技术能力,及用户如何使用阿里云灵骏产品进行AI大模型开发、训练和应用。围绕当下大模型训练和推理的技术难点,专家们分享了如何在阿里云上实现稳定、高效、经济的大模型训练,并通过多个客户案例展示了云上大模型训练的显著优势。
|
25天前
|
存储 人工智能 调度
阿里云吴结生:高性能计算持续创新,响应数据+AI时代的多元化负载需求
在数字化转型的大潮中,每家公司都在积极探索如何利用数据驱动业务增长,而AI技术的快速发展更是加速了这一进程。
|
16天前
|
并行计算 前端开发 物联网
全网首发!真·从0到1!万字长文带你入门Qwen2.5-Coder——介绍、体验、本地部署及简单微调
2024年11月12日,阿里云通义大模型团队正式开源通义千问代码模型全系列,包括6款Qwen2.5-Coder模型,每个规模包含Base和Instruct两个版本。其中32B尺寸的旗舰代码模型在多项基准评测中取得开源最佳成绩,成为全球最强开源代码模型,多项关键能力超越GPT-4o。Qwen2.5-Coder具备强大、多样和实用等优点,通过持续训练,结合源代码、文本代码混合数据及合成数据,显著提升了代码生成、推理和修复等核心任务的性能。此外,该模型还支持多种编程语言,并在人类偏好对齐方面表现出色。本文为周周的奇妙编程原创,阿里云社区首发,未经同意不得转载。
11582 12
|
10天前
|
人工智能 自然语言处理 前端开发
100个降噪蓝牙耳机免费领,用通义灵码从 0 开始打造一个完整APP
打开手机,录制下你完成的代码效果,发布到你的社交媒体,前 100 个@玺哥超Carry、@通义灵码的粉丝,可以免费获得一个降噪蓝牙耳机。
4073 14
|
16天前
|
人工智能 自然语言处理 前端开发
用通义灵码,从 0 开始打造一个完整APP,无需编程经验就可以完成
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。本教程完全免费,而且为大家准备了 100 个降噪蓝牙耳机,送给前 100 个完成的粉丝。获奖的方式非常简单,只要你跟着教程完成第一课的内容就能获得。
6818 10
|
28天前
|
缓存 监控 Linux
Python 实时获取Linux服务器信息
Python 实时获取Linux服务器信息
|
14天前
|
人工智能 自然语言处理 前端开发
什么?!通义千问也可以在线开发应用了?!
阿里巴巴推出的通义千问,是一个超大规模语言模型,旨在高效处理信息和生成创意内容。它不仅能在创意文案、办公助理、学习助手等领域提供丰富交互体验,还支持定制化解决方案。近日,通义千问推出代码模式,基于Qwen2.5-Coder模型,用户即使不懂编程也能用自然语言生成应用,如个人简历、2048小游戏等。该模式通过预置模板和灵活的自定义选项,极大简化了应用开发过程,助力用户快速实现创意。
|
3天前
|
机器学习/深度学习 人工智能 安全
通义千问开源的QwQ模型,一个会思考的AI,百炼邀您第一时间体验
Qwen团队推出新成员QwQ-32B-Preview,专注于增强AI推理能力。通过深入探索和试验,该模型在数学和编程领域展现了卓越的理解力,但仍在学习和完善中。目前,QwQ-32B-Preview已上线阿里云百炼平台,提供免费体验。
|
10天前
|
人工智能 C++ iOS开发
ollama + qwen2.5-coder + VS Code + Continue 实现本地AI 辅助写代码
本文介绍在Apple M4 MacOS环境下搭建Ollama和qwen2.5-coder模型的过程。首先通过官网或Brew安装Ollama,然后下载qwen2.5-coder模型,可通过终端命令`ollama run qwen2.5-coder`启动模型进行测试。最后,在VS Code中安装Continue插件,并配置qwen2.5-coder模型用于代码开发辅助。
738 5