Должен ли каждый класс Java иметь конструктор с нулевым аргументом?
Нет
Если нет смысла создавать экземпляр класса без предоставления какой-либо информации конструктору, тогда вам не нужно имеют конструктор с нулевым аргументом.
Хорошим примером является класс java.awt.Color , все ctors которого аргументированы.
Нет, не имеет смысла всегда создавать конструкторы с нулевым аргументом, следующие сценарии являются примерами, в которых имеет смысл предоставить по крайней мере конструктор-некоторый-аргумент
Случаи, когда вы хотите иметь / нуждаетесь в конструкторе без аргументов:
На мой взгляд, одним из ошибочных аргументов в пользу конструктора с нулевым аргументом является длинный список аргументов. Для этого есть лучшие решения, чем принятие инициализации объекта, который не находится в безопасном состоянии после создания:
Как уже заметил Энди Томас-Крамер, это даже невозможно:
class NeedsToBeImmutable {
// For a class to be immutable, its reachable state
// MUST be reached through a final field
private final String stuff;
//!!Compile error!!
public NeedsToBeImmutable(){}
public NeedsToBeImmutable(String stuff){
this.stuff = stuff;
}
//getters...
}
Нет. Однако бывают исключения. Например, если вы хотите, чтобы ваш класс содержал только статические методы утилиты или одноэлементный класс или класс только с константами, вам следует создать частный конструктор без аргументов, чтобы предотвратить его явное создание.