I tried to run this program but this gives a runtime error(StackOverflowError). If in class Static I make reference object ob, static, then no error occurs. Can anyone please explain me why is this happening and please explain me how are field variables(whether static or non static and whether reference or non reference variables) initialized?
public class Static {
public Static ob = new Static();
private int a;
public void win(Static obj) {
//System.out.printf("ob.a = %d\n", ob.a);
obj.a = 15;
System.out.printf("ob.a = %d", ob.a);
}
}
public class StaticTest {
public static void main(String args[])
{
Static obj=new Static();
//Static obj1=new Static();
// obj.win(obj1.ob);
}
}
Your code creates an instance of Static class.
When the instance is create their attributes are initialized. What your code does is to initialize the ‘ob’ attribute with pointing to a new Static instance.
Then the new instance of Static class is created, and … you have an “infinite initialization loop”.
If you attach ‘static’ keyworkd to an attribute you are creating a “class attribute”, that is, an attributed shared among all instances of that class.
This means when you execute code and the first instance of Static is goind to be created JAva initialize the ob attribute. Subsequent instances of Static doesn’t initialize it because it is shared among all.
See this sample: http://www.roseindia.net/java/beginners/staticvariable.shtml