0
我在写程序,所以我遇到了问题。Java - finalize()不叫
为什么finalize()方法不被调用?
public class ExOne extends Thread {
private String sD;
ExOne(String startUp, String shutDown){
System.out.println("Start-up message is: " + startUp);
sD = shutDown;
}
public void finalize() {
System.out.println("Shut-down message is: " + sD);
}
@Override
public void run() {
try {
for (int i = 0; i < 3; i++) {
System.out.println("Message " + String.valueOf(i));
Thread.sleep(1000);
}
}
catch (InterruptedException e){
System.out.println(e);
}
System.gc();
System.runFinalization();
}
}
public class Main {
public static void main(String[] args) {
ExOne exOneobj = new ExOne("start", "stop");
exOneobj.start();
}
}
所以输入:
Start-up message is: start
Message 0
Message 1
Message 2
Process finished with exit code 0
而且没有消息 “具备停机的消息是停止”。 请帮帮我。
出了什么问题?
你的程序中没有任何'exOneobj'超出范围,所以它永远不会被垃圾收集,所以'finalize()'永远不会运行。 – azurefrog
''finalize()'是在垃圾收集对象('exOneobj')释放内存空间之前执行的,但是在你的程序中当'run'退出时'exOneobj'仍然在内存中,但程序结束以至于finalize()不叫 –