大家好,我是小米,29岁,热爱编程和分享的小太阳!最近有个朋友小王社招面试了Java开发岗,回来一脸懵圈跟我诉苦:
“面试官问我final、finally、finalize的区别,我竟然语无伦次!你说这仨到底有啥关系啊?就不能换点简单的问题吗?”
哈哈,其实这题还挺常见的!不少开发者刚接触Java时都容易混淆它们。为了不让更多人踩坑,今天小米带你通过一个故事彻底搞懂这三者的区别。
故事开头:Java村的三兄弟
从前有个Java村,住着三兄弟:final、finally 和 finalize。他们看起来名字很像,但性格却截然不同。
老大: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岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!