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)
Increase Thread Stack Size (-Xss) Increasing the stack size can be useful, for example, when the program involves calling a large number of methods or using lots of local variables. This will set the thread's stack size to 4 mb which should prevent the JVM from throwing a java.
The most-common cause of stack overflow is excessively deep or infinite recursion, in which a function calls itself so many times that the space needed to store the variables and information associated with each call is more than can fit on the stack.
StackOverflowError is an error which Java doesn't allow to catch, for instance, stack running out of space, as it's one of the most common runtime errors one can encounter.
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();
You instantiate the class Cloning
every time Cloning
is constructed, which causes a recursion on instantiations.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With