//: initialization/TerminationCondition.java
// Using finalize() to detect an object that
// hasn't been properly cleaned up.class Book {
boolean checkedOut = false; Book(boolean checkOut) {
checkedOut = checkOut;
} void checkIn() {
checkedOut = false;
} protected void finalize() {
if (checkedOut)
System.out.println("Error: checked out");
// Normally, you'll also do this:
// super.finalize(); // Call the base-class version
}
}public class TerminationCondition {
public static void main(String[] args) {
Book novel = new Book(true);
// Proper cleanup:
novel.checkIn();
// Drop the reference, forget to clean up:
new Book(true);
// Force garbage collection & finalization:
System.gc();
}
} /*
 * Output: Error: checked out
 */// :~
问题:
运行System.gc()上一步前checkedOut的值是ture,为什么到了System.gc()就变成false了?