3 回答

TA貢獻1877條經驗 獲得超6個贊
主要問題減少到
public class Main {
DeleteWall ok = new DeleteWall();
}
和
public class DeleteWall {
Main werk = new Main();
}
如果這些類中的任何一個被實例化,則必須創建另一個的實例,這又將再次創建第一個的新實例,依此類推。整個設計很奇怪,就像聲明每個 House 總是包含一個 Car,而每個 Car 總是包含一個 House。
解決問題:接收DeleteWall實例Main而不是創建新實例。一些可能性:
在構造函數中
public class Main {
DeleteWall ok = new DeleteWall(this);
}
////
public class DeleteWall {
Main werk;
public DeleteWall(Main main) {
werk = main;
}
}
打電話的時候
public class Main {
DeleteWall ok = new DeleteWall();
public void demo() {
ok.delWalls(this, 30, 0, 30, 30);
}
}
////
public class DeleteWall {
public void delWalls(Main werk, ...) {
werk.delNodes(...);
}
}
(還有很多其他的可能性,這在很大程度上取決于程序應該做什么,問題是如何建模的,偏好,......)

TA貢獻1946條經驗 獲得超4個贊
DeleteWall
您有一個inside實例Main
和Main
inside實例DeleteWall
?,F在,當它嘗試創建Main
類時,它需要DeleteWall
為該字段創建一個實例,當它嘗試這樣做時,它將需要為該字段DeleteWall ok= new DeleteWall();
創建一個inside的實例。然后它返回創建 Main 并且你有你的無限循環。Main
Main werk = new Main();
DeleteWall

TA貢獻1836條經驗 獲得超13個贊
您的班級有一個用對象初始化的Main
字段。您的班級有一個用對象初始化的字段。ok
DeleteWall
DeleteWall
werk
Main
因此,當程序開始運行時,它會實例化該類Main
。由于在實例化類時所有字段都被賦予了默認值,所以這就需要實例化類DeleteWall
,這樣werk
才能初始化。實例化DeleteWall
類需要先實例化Main
類,這樣ok
才能初始化。實例化Main
類需要先實例化DeleteWall
類,這樣werk
才能初始化。實例化DeleteWall
類需要先實例化Main
類,這樣ok
才能初始化。實例化Main
類需要先實例化DeleteWall
類,這樣werk
才能初始化。...
添加回答
舉報