java.lang.StackOverflowError 但我没有循环任何东西

我有两种方法,一种在主类中,一种在名为“DeleteWall”的类中。我正在创建每个类的实例,以便我可以访问它们的方法。我已经阅读了 stackOverflows 上的所有帖子,但我看不到什么我做错了......就像我没有循环它以尽可能地创建一个新实例一样。我将突出显示导致错误的行,如 intellij 所说。我只调用一次演示以及。哦,方法“delNode”在主类中,因此它的实例是“werk”。


    //Main class

    DeleteWall ok=new DeleteWall(); //error line

    public void demo(){

    System.out.println("running");

    ok.delWalls(30,0,30,30);

    System.out.println("didnt stop");

    }

     //DeleteWall class

     public class DeleteWall  {


     Main werk = new Main(); //error line


     public  void delWalls(int Sx, int Sy, int Ex, int Ey) {



     werk.delNode(Sx, Sy, Ex, Ey);

     }


     }

http://img3.mukewang.com/641befb50001c2fa05920558.jpg

江户川乱折腾
浏览 114回答 3
3回答

慕哥9229398

主要问题减少到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(...);    }}(还有很多其他的可能性,这在很大程度上取决于程序应该做什么,问题是如何建模的,偏好,......)

绝地无双

DeleteWall您有一个inside实例Main和Maininside实例DeleteWall。现在,当它尝试创建Main类时,它需要DeleteWall为该字段创建一个实例,当它尝试这样做时,它将需要为该字段DeleteWall ok= new DeleteWall();创建一个inside的实例。然后它返回创建 Main 并且你有你的无限循环。MainMain werk = new Main();DeleteWall

开心每一天1111

您的班级有一个用对象初始化的Main字段。您的班级有一个用对象初始化的字段。okDeleteWallDeleteWallwerkMain因此,当程序开始运行时,它会实例化该类Main。由于在实例化类时所有字段都被赋予了默认值,所以这就需要实例化类DeleteWall,这样werk才能初始化。实例化DeleteWall类需要先实例化Main类,这样ok才能初始化。实例化Main类需要先实例化DeleteWall类,这样werk才能初始化。实例化DeleteWall类需要先实例化Main类,这样ok才能初始化。实例化Main类需要先实例化DeleteWall类,这样werk才能初始化。...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java