Search code examples
javastack-overflow

stackoverflow error when creating object outside the main method


While running this code it shows Stackoverflow error. What is it I am doing wrong, why does the code compile?

public class Foo {
    int a = 5;
    Foo f = new Foo();

    void go() {
        System.out.println(f.a);
    }

    public static void main(String[] args) {
        Foo f2 = new Foo();
        f2.go();
    }
}

Solution

  • You can call go method with an instance only. so before call to go started, c'tor has run for class Foo

    Now, C'tor is designed to initialize all instance members.

    So one by one it initializes:

    a is initialized to 5

    f is initialized to an Object // but here is the catch, f never gets initilized.

    before = operator works, C'tor is called and thus the chain continues.

    If you see the stacktrace, it'll have init written in it. so it's failing during initialization only.