Why am I getting a StackOverflowError exception in my constructor

后端 未结 3 610
温柔的废话
温柔的废话 2020-12-06 13:52
public class Cloning {

    Cloning c=new Cloning();
    public static void main(String[] args) {

        Cloning c=new Cloning();
        c.print();
    }

    pub         


        
相关标签:
3条回答
  • 2020-12-06 13:58

    Didn't you mean to write static Cloning c = new Cloning(); outside main, or c = new Cloning(); within main instead?

    Otherwise, you'll get a new instance of c each time this is run, which will cause a StackOverflowError.

    Currently the creation of the local c in Cloning c = new Cloning(); (which shadows the field c) kicks the whole thing off.

    0 讨论(0)
  • 2020-12-06 14:09

    Your main method creates a Cloning instance (Cloning c=new Cloning();), which causes the initialization of the instance variable c (Cloning c=new Cloning();), which creates another Cloning instance, and so on...

    You have an infinite chain of constructor calls, which leads to StackOverflowError.

    In the above code I have a simple class and a class level instance

    You don't have a class level instance. You have an instance level instance. If you want a class level instance, change

    Cloning c=new Cloning();
    

    to

    static Cloning c=new Cloning();
    
    0 讨论(0)
  • 2020-12-06 14:19

    You instantiate the class Cloning every time Cloning is constructed, which causes a recursion on instantiations.

    0 讨论(0)
提交回复
热议问题