亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

java.lang.StackOverflowError 但我沒有循環任何東西

java.lang.StackOverflowError 但我沒有循環任何東西

江戶川亂折騰 2023-03-23 14:20:05
我有兩種方法,一種在主類中,一種在名為“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);     }     }
查看完整描述

3 回答

?
慕哥9229398

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(...);

    }

}

(還有很多其他的可能性,這在很大程度上取決于程序應該做什么,問題是如何建模的,偏好,......)


查看完整回答
反對 回復 2023-03-23
?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

DeleteWall您有一個inside實例MainMaininside實例DeleteWall?,F在,當它嘗試創建Main類時,它需要DeleteWall為該字段創建一個實例,當它嘗試這樣做時,它將需要為該字段DeleteWall ok= new DeleteWall();創建一個inside的實例。然后它返回創建 Main 并且你有你的無限循環。MainMain werk = new Main();DeleteWall



查看完整回答
反對 回復 2023-03-23
?
開心每一天1111

TA貢獻1836條經驗 獲得超13個贊

您的班級有一個用對象初始化的Main字段。您的班級有一個用對象初始化的字段。okDeleteWallDeleteWallwerkMain

因此,當程序開始運行時,它會實例化該類Main。由于在實例化類時所有字段都被賦予了默認值,所以這就需要實例化類DeleteWall,這樣werk才能初始化。實例化DeleteWall類需要先實例化Main類,這樣ok才能初始化。實例化Main類需要先實例化DeleteWall類,這樣werk才能初始化。實例化DeleteWall類需要先實例化Main類,這樣ok才能初始化。實例化Main類需要先實例化DeleteWall類,這樣werk才能初始化。...


查看完整回答
反對 回復 2023-03-23
  • 3 回答
  • 0 關注
  • 181 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號