Я не уверен, что код, который вы читали, был высокого качества (в прошлом я просматривал некоторый код биоинформатики, и, к сожалению, его часто не пишут профессиональные разработчики). Например, этот третий конструктор не является конструктором копирования, и, как правило, в этом коде есть проблемы, поэтому я бы не стал «читать слишком много в него».
Первый конструктор является конструктором по умолчанию. Он только инициализирует минимум и позволяет пользователям устанавливать остальное с помощью геттеров и сеттеров. Другие конструкторы часто являются «удобными конструкторами», которые помогают создавать объекты с меньшим количеством вызовов. Однако это часто может привести к несоответствиям между конструкторами. Фактически, недавнее исследование показало, что конструктор по умолчанию с последующими вызовами сеттеров предпочтителен.
В некоторых случаях конструктор по умолчанию является критическим. Например, некоторые платформы, такие как digester (используется для создания объектов непосредственно из XML), используют конструкторы по умолчанию. JavaBeans обычно использует конструкторы по умолчанию и т. Д.
Кроме того, некоторые классы наследуются от других классов. вы можете увидеть конструктор по умолчанию, когда инициализация родительского объекта "достаточно хороша".
В этом конкретном случае, если этот конструктор не был определен, нужно было бы знать все детали заранее. Это не всегда предпочтительно.
И, наконец, некоторые IDE автоматически генерируют конструктор по умолчанию, возможно, что тот, кто написал класс, боялся его устранить.