Я так понимаю, что у каждого объекта типа календарь будут уникальные параметры (год, дата, эра). Для этого переменные и константы класса не должны быть статическими.
Однако в документации класса указано, что эти константы статические.
Подскажите, пожалуйста, почему?![]()
K.
39 уровень
Вопрос по классу Calendar
Решен
Комментарии (7)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ksenia VolkovaJava Developer в DXCMaster
15 декабря 2021, 14:18
Эти MONTH и YEAR - это не конкретные месяц и год конкретного Calendar.
Это обозначения полей, в которых будут храниться значения года, месяца и т. д.
Например, чтобы получить значение года для конкретного объекта Calendar, ты можешь написать
а можешь
Результат будет один и тот же, потому что числом 1 "закодирован" год.
0
K.
15 декабря 2021, 14:47
Поможешь, пожалуйста, понять создание объекта даты с помощью календаря?
Не могу пока это уложить в голове. Сейчас я знаю, что есть статические и нестатические поля класса, и при создании объекта класса можно присвоить уникальные значения нестатических полей.
Я нашла у класса Calendar два конструктора, но я так поняла, что мы ими не пользуемся. А для создания объекта "Дата" мы используем класс GregorianCalendar (наследник Calendar).
И сейчас мне непонятна его запись.
Если у класса Calendar MONTH, YEAR итд — это не конкретные месяц и год конкретного Calendar, а обозначения полей, в которых будут храниться значения года, месяца и тд, то как тогда происходит инициализация полей нового объекта "Дата" ?
0
K.
15 декабря 2021, 14:54
Сеттер у класса тоже пока для меня неочевидный. Он использует абстрактные методы и там нет конкретного "меняем значение поля MONTH на заданное число.
Поэтому я не совсем понимаю, где и как хранятся значение даты, года, месяца у конкретных объектов, которые мы создаем..
0
Ksenia VolkovaJava Developer в DXCMaster
15 декабря 2021, 16:32полезный
Мы не используем напрямую конструкторы Calendar, потому что класс Calendar - абстрактный, и его экземпляр создать невозможно.
В конструктор GregorianCalendar, который ты приводишь, есть вызов другого конструктора:
и здесь есть вызов метода setTimeInMillis(), который устанавливает объекту конкретное время в мс.
Время Calendar хранит в двух видах - в миллисекундах (как Date) и в виде набора полей: год, месяц, число... и т.д.
Этот набор полей хранится в массиве int[] fields.
Как эти два представления даты между собой взаимодействуют, можно почитать в доках класса Calendar. В частности, там в начале класса есть развернутый комментарий с заголовком Data flow in Calendar.
Calendar MONTH, YEAR и т.д. - это просто индексы соответсвующих ячеек массива fields.
Год всегда будет в ячейке номер 1, месяц - в ячейке номер 2. Поэтому эти поля - статические константы, номера ячеек одни и те же для всех объектов Calendar.
А значения сеттер устанавливает с помощью вызова
Вот как он выглядит - просто кладет значение в нужную ячейку массива:
+1
K.
15 декабря 2021, 18:14
Получается, когда мы пишем:
Мы как бы просим метод get() вернуть нам значение из массива внутри объекта calendar под "индексом" / "номером" Calendar.MONTH.
А когда мы пишем:
То мы передаем значения int в массив private int[] fields.
Правильно ли я поняла?
0
Ksenia VolkovaJava Developer в DXCMaster
15 декабря 2021, 18:30решение
Именно так.
+2
K.
15 декабря 2021, 18:43
Спасибо тебе большое!
0