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
。现在,当它尝试创建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
才能初始化。...
添加回答
举报