日期:2014-05-20  浏览次数:20762 次

一个关于this和finalize的问题
最近看Thing In Java第四版 有两道题不会 请大家帮忙解答下
第一个题目:
编写具有两个(重载)构造器的类,并在第一个构造器中通过this调用第二个构造器。
我有点想不明白 this表示的是 调用方法的那个对象的引用 既然是对象的引用 一个对象只能调用一个构造器 为什么能去调用第二个?
(小弟对this一直不太理解,希望大家给我解释下)
第二个问题

class Book{
Book(){
System.out.println("Book()");
}
protected void finalize(){
System.out.println("Book()");
}
}
public class P510 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
Book b=new Book();
System.gc();
}

}
这个finalize()为什么不会执行?
System.gc()不是会强行执行终结动作吗?
怎么让finalize()可以执行?


------解决方案--------------------
public final class Test {
public Test() {
this("haha");
}

public Test(String... name) {
System.out.println(name[0]);
}

public static void main(String... args) {
new Test();
}
}

调用了gc()后虚拟机有时候也不一定会马上启动垃圾回收的,这个要看操作系统和CPU脸色的
------解决方案--------------------
to question 1:
-->"一个对象只能调用一个构造器",应该是说只能用this来调用一个构造器,而不能调用两个!
“并在第一个构造器中通过this调用第二个构造器。”这里对于第一个构造器来说,是不是只用this来调用一次第二个构造器,所以当然可以!如果在第一个构造器内用this来调用第二个构造器一次以上,那就不行!
------解决方案--------------------
你这个程序有几个问题:
1,"this.Gouzao(i); "首先,i没有定义,也没有初始化。
然后, 调用构造器的方法是:this()而不是this.constructo()
应改成this(2);
2,“Gouzao(){ 
System.out.println("Gouzao()"); 
this.Gouzao(i); 
}”在一个构造器中调用其它构造器,this必须是第一句,所以应改成:
Gouzao(){ 
this(2);
System.out.println("Gouzao()"); 
}