JAVA中一个类的对象被垃圾回收器回收前,它的方法回自动执行吗?

来源:百度知道 编辑:UC知道 时间:2024/06/22 15:41:50
class FDemo {
int x;
FDemo(int i) {
x = i;
}
// called when object is recycled
protected void finalize() {
System.out.println("Finalizing " + x);
}
// generates an object that is immediately destroyed
void generator(int i) {
FDemo o = new FDemo(i);
}
}
class Finalize {
public static void main(String args[]) {
int count;
FDemo ob = new FDemo(0);
/* Now, generate a large number of objects. At
some point, garbage collection will occur.
Note: you might need to increase the number
of objects generated in order to force
garbage collection. */
for(count=1; count < 100000; count++)
ob.generator(count);
}
}
上面程序中创建的对象被回收前,finalize()就会被执行
正常情况是只有调用一个类定义的方法时候,才会执行的.

所谓的finalize()会被自动执行,用的是AOP的概念,也就是JDK的动态代理

哥们,
void generator(int i) {
FDemo o = new FDemo(i);
}
你看看你这个方法,这里创建的对象都是没用的对象阿。创建完就走出他的有效范围要被回收。
for(count=1; count < 100000; count++)
ob.generator(count);
}
在这里调用创建完第一个对象后,开始创建第二个对象,这个时候你第一个创建的对象就超过有效使用范围成垃圾对象了,就会自动被清理而调用第一个对象的finalize()方法了。以此类推你这个循环里建的对象都是在一创建完后立马成垃圾对象了,所以要被回收,就造成了你以为是在创建的时候调用finalize()。

而事实是对象在创建完后马上就被回收而调用finalize()方法的。