Search code examples
javastack-overflow

Why am I receiving a stack overflow?


My first block of code is my Item Object file; the second is the Main Class. Before there was not any issues with the code running but after I had added a read and write file my code had started to receive a stack flow error. just the snippet of which the error is being called.

    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  
    }

My Main class:

    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.StackOverflowError
at 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)

How can I find where the stack overflow is being caused?


Solution

  • Item creates SlayerProgram:

    SlayerProgram sp = new SlayerProgram();
    

    And SlayerProgram creates Item

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

    And therefore on initialization you will create those objects endlessly

    There's a similar Baeldung example for getting StackOverflowError

    This ends up with a StackOverflowError since the constructor of ClassOne is instantiating ClassTwo, and the constructor of ClassTwo again is instantiating ClassOne.