名字跟final, finally 關鍵字很相似,但本質就有很大的分別。
finalize 只是Method,屬於java.lang.Object類別。
finalize() method 一般會被叫做終結者。
終結者會被觸發當JVM 計算出要執行garbage collection的時候. 而終結者會執行任何操作。
finalize() method 的主要作用是把物件的資源在被刪除(garbage collection)之前釋放出來或者進行結尾的動作。
public class Finalizable {
private BufferedReader reader;
public Finalizable() {
InputStream input = this.getClass()
.getClassLoader()
.getResourceAsStream("file.txt");
this.reader = new BufferedReader(new InputStreamReader(input));
}
public String readFirstLine() throws IOException {
String firstLine = reader.readLine();
return firstLine;
}
// other class members
}
大家會留意到物件reader是仍然沒有close,所以可以透過finalize()來執行close這個動作。
@Override
public void finalize() {
try {
reader.close();
System.out.println("Closed BufferedReader in the finalizer");
} catch (IOException e) {
// ...
}
}
運用了finalize() {就可以完全保證reader這個資源能在整個程式進入garbage collection之前釋放出來。