java finalize如何使用
finalize方法的基本概念
在Java中,finalize是Object类的一个方法,用于在垃圾回收器回收对象之前执行清理操作。默认实现为空,子类可以重写此方法以释放资源或执行其他清理任务。
重写finalize方法的语法
@Override
protected void finalize() throws Throwable {
// 清理代码
super.finalize(); // 调用父类的finalize方法
}
finalize方法的使用场景
- 释放非内存资源:如文件句柄、数据库连接等,这些资源不会被垃圾回收器自动管理。
- 日志记录:在对象被回收时记录日志,用于调试或监控。
finalize方法的注意事项
- 不确定性:
finalize方法的调用时间由垃圾回收器决定,无法保证及时执行。 - 性能影响:
finalize方法可能延迟垃圾回收,影响程序性能。 - 替代方案:推荐使用
try-with-resources或AutoCloseable接口管理资源。
finalize方法的示例代码
public class ResourceHolder {
private FileInputStream fis;
public ResourceHolder(String filePath) throws FileNotFoundException {
fis = new FileInputStream(filePath);
}
@Override
protected void finalize() throws Throwable {
try {
if (fis != null) {
fis.close();
System.out.println("FileInputStream closed in finalize");
}
} finally {
super.finalize();
}
}
}
finalize方法的替代方案
-
使用try-with-resources:
try (FileInputStream fis = new FileInputStream("file.txt")) { // 使用资源 } catch (IOException e) { e.printStackTrace(); } -
实现AutoCloseable接口:

public class ResourceHolder implements AutoCloseable { private FileInputStream fis; public ResourceHolder(String filePath) throws FileNotFoundException { fis = new FileInputStream(filePath); } @Override public void close() throws Exception { if (fis != null) { fis.close(); } } }
finalize方法的废弃说明
从Java 9开始,finalize方法被标记为@Deprecated,因为其存在不确定性和性能问题。建议使用其他资源管理机制替代。






