为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我会收到堆栈溢出?

为什么我会收到堆栈溢出?

慕婉清6462132 2022-07-06 16:51:12
我的第一个代码块是我的项目对象文件;第二个是主类。在代码运行没有任何问题之前,但在我添加了读写文件之后,我的代码开始收到堆栈流错误。只是调用错误的片段。    public class Item implements java.io.Serializable {    public static String name;    public static double price;    public static double amount;    public int max = 1;    SlayerProgram sp = new SlayerProgram();    ReadFile rf = new ReadFile();    public Item(String name, double price,double amount )    {    this.name = name;    this.price = price;    this.amount = amount;    }    public void ItemSet(String name, double price,double amount)    {    this.name = name;    this.price = price;    this.amount = amount      }我的主要课程:    public class SlayerProgram {//import file txts, and Item Class        static String name;        static double price;        static double amount; Item item = new Item(name,price,amount);ReadFile rf = new ReadFile();static String fileNameText = "D:\\Game\\SlayerProgram\\Name.txt";static String filePriceInt = "D:\\Game\\SlayerProgram\\Price.txt";static String fileAmountInt ="D:\\Game\\SlayerProgram\\Amount.txt";   //begin file Read   public void BeginText() throws IOException{    TextFile();}public void Max(){    item.Max();}    //declare needed Data Types;        final int max = item.max;        ArrayList<String> Name  = new ArrayList<>();        ArrayList<Double> Price = new ArrayList<>();        double size = Price.size();        ArrayList<Double> Amount = new ArrayList<>();Exception in thread "main" java.lang.StackOverflowErrorat slayerprogram.Item.<init>(Item.java:18)at slayerprogram.SlayerProgram.<init>(SlayerProgram.java:25)at slayerprogram.Item.<init>(Item.java:18)at slayerprogram.SlayerProgram.<init>(SlayerProgram.java:25)如何找到导致堆栈溢出的位置?
查看完整描述

2 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

Item创建SlayerProgram

SlayerProgram sp = new SlayerProgram();

SlayerProgram创造Item

Item item = new Item(name,price,amount);

因此,在初始化时,您将无休止地创建这些对象

有一个类似的Baeldung 示例用于获取 StackOverflowError

这以 StackOverflowError 告终,因为 ClassOne 的构造函数正在实例化 ClassTwo,而 ClassTwo 的构造函数又在实例化 ClassOne。


查看完整回答
反对 回复 2022-07-06
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

因为和类之间存在circular依赖关系。您已经在 class和in class中创建了。所以当你尝试创建它的对象时,它会尝试创建它的对象,然后尝试创建它的对象,它仍然会继续并导致。ItemSlayerProgramItem item = new Item(name,price,amount);SlayerProgramSlayerProgram sp = new SlayerProgram();ItemItemSlayerProgramSlayerProgramItemmethod stack is not fullStackOverflow



查看完整回答
反对 回复 2022-07-06
  • 2 回答
  • 0 关注
  • 73 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信