Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

final、finally、finalize() 分别是什么?

先说出你的答案

定义边界、关键机制、一个反例;P8题再补容量、失败与验证。

查看完整题解

参考回答

直接回答

final 是修饰符,用来限制变量重新赋值、方法重写或类继承;finally 是 try 语句中的收尾代码块;finalize() 是已弃用并计划移除的对象终结方法。名字相近,但分别属于声明约束、执行控制和旧式终结机制。

讲清原理

写法 关注点 常见误解
final 变量 赋值后不能再赋另一个值 引用指向的对象一定不可变
finally 离开 try/catch 时的收尾 任何情况下都会执行
finalize() 不保证时机的终结回调 等同于确定执行的析构函数

final 的具体约束要看它修饰什么。finally 中新的 return 或异常可能覆盖原本的结果。finalize() 在 Java 21 中不应再用于设计资源管理逻辑。

例子与易错点

final var names = new java.util.ArrayList<String>();
names.add("小林"); // 允许,修改的是对象内容
System.out.println(names.size()); // 1

若再给 names 赋一个新列表则不允许。关闭文件或连接应优先考虑 try-with-resources,而不是指望 final、finally、finalize 三者的名字存在某种联动。

相关题:第 2 题、第 7 题、第 45 题、第 59 题。

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。