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)
You instantiate the class
Cloning
every timeCloning
is constructed, which causes a recursion on instantiations.Didn't you mean to write
static Cloning c = new Cloning();
outsidemain
, orc = new Cloning();
withinmain
instead?Otherwise, you'll get a new instance of
c
each time this is run, which will cause aStackOverflowError
.Currently the creation of the local
c
inCloning c = new Cloning();
(which shadows the fieldc
) kicks the whole thing off.Your main method creates a
Cloning
instance (Cloning c=new Cloning();
), which causes the initialization of the instance variablec
(Cloning c=new Cloning();
), which creates anotherCloning
instance, and so on...You have an infinite chain of constructor calls, which leads to
StackOverflowError
.You don't have a class level instance. You have an instance level instance. If you want a class level instance, change
to