请教:
finalize这个方法是不是当对像为null时,垃圾收集器在回收此对象之前所调用的方法呢?
我写了一个Person类,重写了finalize()方法。public class Person{
private String name;
private int age;
public Person(String name, int age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
protected void finalize() throws Throwable {
System.out.println("已回收!");
} public String toString() {
return "大家好!我的名字叫" + name + ",今年" + age + "岁了!";
}
}
以下是测试类:public class Test1 extends Thread{ public void run() {
System.out.println(new Person("张三",23));
} public static void main(String[] args) throws InterruptedException {
System.out.println("程序运行开始");
new Test1().start();
Thread.sleep(100000);
System.out.println("程序运行结束!");
}}执行结果如下:
程序运行开始
大家好!我的名字叫张三,今年23岁了!
程序运行结束!
为什么finalize()没有执行呢?是我理解错了,还是写的例子不明够说明?
finalize这个方法是不是当对像为null时,垃圾收集器在回收此对象之前所调用的方法呢?
我写了一个Person类,重写了finalize()方法。public class Person{
private String name;
private int age;
public Person(String name, int age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
protected void finalize() throws Throwable {
System.out.println("已回收!");
} public String toString() {
return "大家好!我的名字叫" + name + ",今年" + age + "岁了!";
}
}
以下是测试类:public class Test1 extends Thread{ public void run() {
System.out.println(new Person("张三",23));
} public static void main(String[] args) throws InterruptedException {
System.out.println("程序运行开始");
new Test1().start();
Thread.sleep(100000);
System.out.println("程序运行结束!");
}}执行结果如下:
程序运行开始
大家好!我的名字叫张三,今年23岁了!
程序运行结束!
为什么finalize()没有执行呢?是我理解错了,还是写的例子不明够说明?
{
// finalization code here
}其中,关键字protected是防止在该类之外定义的代码访问finalize()标识符。该标识符和其他标识符将在第7章中解释。理解finalize( ) 正好在垃圾回收以前被调用非常重要。例如当一个对象超出了它的作用域时,finalize( ) 并不被调用。这意味着你不可能知道何时——甚至是否——finalize( ) 被调用。因此,你的程序应该提供其他的方法来释放由对象使用的系统资源,而不能依靠finalize( ) 来完成程序的正常操作。
我感觉一般情况就不用finalize 呀
system.gc
只能提示JVM进行垃圾回收