Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Насколько хорошо знаете Java?

Что сделает следующая программа?
public class A<T> {

    private static Object object;

    public A(T ret) {
        object = (A<T>) ret;
    }

    public A() {
        object = null;
    }

    static Object GetValue() {
        return ((A) object).GetValue();
    }

    public static void main(String[] args) {
        A ret = new A<>();
        A a = new A<Object>(ret);
        a.GetValue();
    }
}
JavaПрограммирование на java+1
Alexander Bazhenov
  ·   · 236
программирую  · 13 окт 2021
Кручу, верчу, запутать хочу?
Static для переменных или методов общий для всех экземпляров класса. Ответом будет StackOverflowError Exception.
Можно упростить
    public static void main(String[] args) {
        A ret = null;
        A a = null;
        a.GetValue();
    }
Ответ будет тоже самое, так как статические данные живут в области кучи.
После входа в метод main, в стеке будет создано пространство для хранения примитивов и ссылок на объекты.
Ссылки ret и a при создании объекта стек получает дополнительную память поверх себя, но метод GetValue сам по себе статический и ссылается на кучу объекта object. Вызов этого метода приведет к выделению памяти в стеке, и он же запустит еще раз сам себя много раз, чем вызовет переполнения стека с ошибкой StackOverflowError.