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岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号软件求生,获取更多技术干货!

相关文章
|
1月前
|
XML 安全 Java
Java反射机制:解锁代码的无限可能
Java 反射(Reflection)是Java 的特征之一,它允许程序在运行时动态地访问和操作类的信息,包括类的属性、方法和构造函数。 反射机制能够使程序具备更大的灵活性和扩展性
40 5
Java反射机制:解锁代码的无限可能
|
2月前
|
Oracle Java 关系型数据库
农行1面:说说 final,finally,finalize的区别
在 Java中,“final”、“finally”和“finalize”是三个不同的关键字或方法,尽管它们的名字相似,但在功能和用途上却有显著的区别,这篇文章我们继续分析一篇农行1面的题目:说说 final,finally,finalize的区别。
19 3
|
4月前
|
安全 Java 开发者
【技术咖必看】Java异常处理新境界:throws关键字,打造万无一失的方法签名!
【技术咖必看】Java异常处理新境界:throws关键字,打造万无一失的方法签名!
39 3
|
6月前
|
Java UED 开发者
【技术解密】Java异常处理新玩法:throw关键字,你的错误管理利器!
【6月更文挑战第19天】Java异常处理关键在于`throw`,它用于主动抛出异常,确保程序健壮性。例如,当年龄验证失败时,`IllegalArgumentException`被`throw`,提供错误详情。自定义异常如`CustomException`能增强错误信息。此外,通过构建异常链,如在`DataProcessingException`中嵌套`IOException`,保持原始堆栈信息,提供更全面的错误上下文。掌握`throw`能提升错误管理,打造稳定软件。
53 5
|
6月前
|
安全 Java 程序员
💥JAVA世界里的“拆弹专家”:try-catch-finally如何拯救你的代码?
【6月更文挑战第18天】Java异常处理的关键是`try-catch-finally`,它确保程序在遇到错误时不崩溃。例如,在文件操作中,`try`块尝试读/写文件,`catch`捕获如FileNotFoundException或IOException,打印错误信息,而`finally`确保资源释放。通过这种方式,代码能优雅处理异常,增强健壮性。
40 0
|
7月前
|
存储 Java 编译器
【Java探索之旅】静态关键字static与代码块的奥秘
【Java探索之旅】静态关键字static与代码块的奥秘
42 0
|
7月前
|
Java
面试官:小伙子来说一说Java中final关键字,以及它和finally、finalize()有什么区别?
面试官:“小伙子,用过final关键字吗?” 我:“必须用过呀” 面试官:“好,那来说一说你对这个关键字的理解吧,再说一说它与finally、finalize()的区别” 我:“好嘞!
45 1
|
安全
synchronized工作过程中,具体讨论下synchronized里面都干了啥??
synchronized工作过程中,具体讨论下synchronized里面都干了啥??
42 0
|
调度
Thread 类的基本用法——一网打尽
Thread 类的基本用法——一网打尽
|
安全 Java 编译器
[Java基础面试题一]深入谈谈final、finally、 finalize 有什么不同?吊打面试官
[Java基础面试题一]深入谈谈final、finally、 finalize 有什么不同?吊打面试官