Почему этот код Java создает ошибку переполнения стека?

Приведенный ниже код создает ошибку переполнения стека при его выполнении. Однако, если удалить любой из

static final GenerateStackOverflow E1 = new GenerateStackOverflow("value1");final GenerateStackOverflow E2 = new GenerateStackOverflow("value2");

Он работает без стека из-за ошибки потока. Почему я получаю ошибку переполнения стека, если у меня есть две вышеупомянутые строки, но нет ошибки, если только одна из строк находится в классе?

public class GenerateStackOverflow {

    private final String value; 

    static final GenerateStackOverflow E1 = new GenerateStackOverflow("value1");
    final GenerateStackOverflow E2 = new GenerateStackOverflow("value2");


    public GenerateStackOverflow(String value) {
        System.out.println("GenerateStackOverflow.GenerateStackOverflow()");
        this.value = value;
    }

    public String getValue() {
        return value;
    }

    public static void main(String[] args) {
        GenerateStackOverflow.class.getName();
    }
}

Ответы на вопрос(6)

Ваш ответ на вопрос