Why am I getting a StackOverflowError exception in

2020-02-01 04:57发布

public class Cloning {

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

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

    public void print(){
        System.out.println("I am in print");
    }

}

In the above code I have a simple class and a class level instance, I also have a local instance with the same name. When running the above code I get below exception :

Exception in thread "main" java.lang.StackOverflowError
    at com.java8.Cloning.<init>(Cloning.java:6)

3条回答
你好瞎i
2楼-- · 2020-02-01 05:35

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

查看更多
叛逆
3楼-- · 2020-02-01 05:35

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.

查看更多
可以哭但决不认输i
4楼-- · 2020-02-01 05:48

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();
查看更多
登录 后发表回答