final、finally、finalize() 分别是什么?
查看完整题解
参考回答
直接回答
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 题。
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。