我有一個互相引用兩個類:解釋爲什麼這個代碼不工作
class B{
A obj;
B(A obj){
this.obj=obj;
}
void display(){
System.out.println(obj.data);//using data member of A class
}
}
class A{
int data=10;
A(){
B b =new B(new A()); // THIS LINE GENERATES AN ERROR
b.display();
}
public static void main(String args[]){
A a=new A();
}
}
如果我改變了違規行改爲
B b =new B(this);
然後它工作。我認爲這兩條線做同樣的事情。爲什麼一個人工作,而不是另一個?
此外,從第一個版本的編譯器錯誤讀取
A.<init><A.java:15>
這是什麼意思?
準確地說你的問題是什麼?你認爲這應該會導致編譯/運行時錯誤?這是有效的代碼 – 75inchpianist 2013-03-08 19:03:28
新的A()總是創建一個新對象,一個新的對類的引用,並且調用構造函數,在這種情況下,這個循環會無限延伸,而如果你傳遞「this」 - 它引用當前對象。爲了簡化 - 新建A() - 創建一個新對象,這不會使用當前對象創建一個新對象 – din 2013-03-08 19:15:55
有史以來最好的編輯@Nathaniel! – Simon 2013-03-08 19:32:43