public class Cloning {
Cloning c=new Cloning();
public static void main(String[] args) {
Cloning c=new Cloning();
c.print();
}
pub
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.
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.