Java предоставляет конструктор без аргументов, только если другой конструктор не применяется. В ряде API-интерфейсов Java (например, JPA, сериализация и многие другие, которые создают объекты из внешнего представления) требуется экземпляр объекта, прежде чем можно будет установить значения данных объекта, поскольку используются определения того, как применяются значения определяется через члены экземпляра объекта (например, readExternal (ObjectInput)). Если у класса есть только конструктор, который принимает некоторые аргументы, то библиотека не сможет создать экземпляр, если не определен отдельный конструктор без аргументов.
Стоит отметить, что это выбор проекта, реализованный разработчиком конкретной библиотеки, можно создать API / Framework, который может выводить и воссоздавать объекты, не имеющие конструктора без аргументов (определяя заводской класс это один подход). Шаблон требования конструктора без аргументов впервые появился в сериализации Java (я думаю) и был принят в качестве фактического стандартного подхода в других библиотеках (например, JPA). Слабость этого подхода заключается в том, что он предотвращает использование неизменяемых объектов.