Время компиляции и время выполнения
Ответ от Mureinik правильный. Объекты, определенные в вашем коде, создаются в время выполнения , а не время компиляции .
Компиляция похоже на то, как инженер проверяет планы архитектора здания, а затем выписывает более подробные спецификации. Ни одно здание еще не построено. Теперь мы полностью готовы к строительству, но на самом деле ничего не строили до «времени выполнения», когда строительная бригада прибыла на площадку.
В этой метафоре ваш исходный код - это чертежи архитектора. Более подробные спецификации инженера - это байт-код , генерируемый компилятором Java. JVM , использующий байт-код вашего приложения, - это строительная бригада, которая будет работать на месте.
Еще один способ подумать, если это:
- Классы определяются во время компиляции.
- Объекты (экземпляры) определяются во время выполнения.
java.time
Кроме того, вы никогда не должны использовать класс Date
. Этот класс и другие устаревшие классы даты и времени из самых ранних версий Java ужасны , изобилующие плохим выбором дизайна. Они были вытеснены несколько лет назад современными java.time классами.
Классы java.time используют фабричные методы для создания экземпляров, а не конструкторы и new
.
Instant.now() // Capture current moment in UTC.
OffsetDateTime.now( ZoneOffset.UTC ) // Capture current moment in UTC.
ZonedDateTime.now( ZoneId.of( "Africa/Casablanca" ) ) // Capture current moment as seen though the wall-clock time used by the people of a particular region (a time zone).
LocalDate.of( 2018 , Month.JANUARY , 23 ) // A date-only value, without time-of-day and without time zone.