finalize()方法是Java中Object类的一个方法,由垃圾回收器调用,用于在垃圾收集之前释放或清理对象占用的资源。当一个对象不再被引用时,垃圾回收器会在回收这个对象之前,调用其finalize()方法,以便进行资源的释放和清理。
finalize()方法的使用攻略如下:
1. 定义finalize()方法
在需要进行资源释放和清理的类中,可以重写finalize()方法,实现具体的资源释放策略。
public class Resource {
private InputStream is;
public Resource(InputStream is) {
this.is = is;
}
// 重写finalize()方法,关闭资源
@Override
public void finalize() throws Throwable {
super.finalize();
is.close();
}
}
2. 使用finalize()方法
在创建对象的代码块结束处使用try-finally结构,确保在使用完对象后,调用了其finalize()方法。
public class Demo {
public static void main(String[] args) {
InputStream is = new FileInputStream("test.txt");
Resource resource = new Resource(is);
// 使用资源
// ...
// 使用完资源后,调用finalize()方法
try {
// ...
} finally {
resource.finalize();
}
}
}
以上是基本的finalize()方法使用攻略,但需要注意以下两点:
- 垃圾回收器不保证一定会调用finalize()方法,因此不能依赖此方法来确保资源被及时释放和清理。
- finalize()方法只会在垃圾回收器第一次扫描对象时调用一次,因此如果需要多次释放资源,就需要重新创建对象。
示例一:使用finalize()方法关闭数据库连接
public class DBUtil {
private Connection conn;
public DBUtil() {
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
}
// 重写finalize()方法,关闭连接
@Override
public void finalize() throws Throwable {
super.finalize();
conn.close();
}
}
示例二:使用finalize()方法关闭线程
public class WorkerThread implements Runnable {
private Thread thread;
public WorkerThread() {
thread = new Thread(this);
thread.start();
}
@Override
public void run() {
// 线程工作内容
// ...
}
// 重写finalize()方法,关闭线程
@Override
public void finalize() throws Throwable {
super.finalize();
thread.interrupt();
}
}