Почему у LocalDate нет конструктора по умолчанию?
Потому что для него нет «значения по умолчанию», которое имеет смысл. Какими будут значения полей года, месяца и дня в этом случае?
Конструктор по умолчанию отличается от явного конструктора с нулевыми аргументами. Конструктор по умолчанию - это то, что добавляется компилятором, но только , если вы не определяете других конструкторов ( спецификация языка ). LocalDate
имеет явный конструктор и, следовательно, не имеет конструктора по умолчанию. Этот конструктор также является закрытым, поэтому вы не можете вызвать его напрямую.
Эффективная Java имеет длинный элемент (это или Элемент 1, или Элемент 2, я забыл, который) об использовании статических фабричных методов. Одним из первых преимуществ, которые он цитирует, является то, что они ведут себя как именованные конструкторы .
Ясно, что даже не читая Javadoc, LocalDate.now()
вернет вам дату, которая соответствует «сейчас». Хотя вы можете заставить конструктор по умолчанию делать то же самое, это не будет очевидно.