Нет. Java ничего не делает для обнаружения бесконечных циклов или бесконечных рекурсий во время компиляции.
Вы можете скомпилировать код, подобный вашему, или метод, приведенный ниже, просто отлично, он взорвется во время выполнения.
private int recurseForever(){
return recurseForever();
}
В вашем случае конструктор создает новый экземпляр класса и, таким образом, вызывает другой конструктор и т. Д.
Что касается того, почему этого не происходит: потому что это невозможно сделать для всех случаев (остановка проблемы) и использование ресурсов при частичном решении (это работает только иногда, но делает компиляцию медленной всегда и для всех, возможно, также вносит ошибки, потому что компилятор теперь более сложный), по-видимому, не считалось хорошей идеей.