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和Maininside实例DeleteWall。现在,当它尝试创建Main类时,它需要DeleteWall为该字段创建一个实例,当它尝试这样做时,它将需要为该字段DeleteWall ok= new DeleteWall();创建一个inside的实例。然后它返回创建 Main 并且你有你的无限循环。MainMain werk = new Main();DeleteWall
TA贡献1836条经验 获得超13个赞
您的班级有一个用对象初始化的Main字段。您的班级有一个用对象初始化的字段。okDeleteWallDeleteWallwerkMain
因此,当程序开始运行时,它会实例化该类Main。由于在实例化类时所有字段都被赋予了默认值,所以这就需要实例化类DeleteWall,这样werk才能初始化。实例化DeleteWall类需要先实例化Main类,这样ok才能初始化。实例化Main类需要先实例化DeleteWall类,这样werk才能初始化。实例化DeleteWall类需要先实例化Main类,这样ok才能初始化。实例化Main类需要先实例化DeleteWall类,这样werk才能初始化。...
添加回答
举报
