2013-07-09 5 views
4

Я начинающий программист на Java, и я читал о классе Calendar. Это абстрактный класс и все его методы являются статическими, но она используется следующим образом:Почему мы создаем календарный класс (abstract) в Java

Calendar cal = Calendar.getInstance(); 

Где вы используете cal называть такие методы, как:

cal.setTimeinMillis(day1); 

Я запутался об этом. При вызове методов против класса, зачем нам нужна ссылочная переменная и , как это легально для статических методов?

+1

Класс Календари использует шаблон [Singleton Pattern] (http://en.wikipedia.org/wiki/Singleton_pattern), из которого происходит 'getInstance()'. Это позволяет получить ссылку на экземпляр «Calender», статически позволяющую использовать методы экземпляра (нестатические). – chancea

ответ

8
Calendar cal = Calendar.getInstance(); 

Не вызова конструктора, это просто вызов (статический) метод, который возвращает экземпляр некоторого подкласса (из Calendar).

3

Посмотрите еще раз: the documentation; большинство методов Calendar, которые делают что-либо интересное (кроме методов getInstance()), не являются статическими и требуют экземпляра (который действительно является контейнером момента времени, который представляет календарь).

2

1) Является ли календарь не Calandar

2) Calendar.getInstance() будет возвращать некоторое конкретное осуществление календаря, вероятно GregorianCalendar.

3) cal.setTimeinMillis(day1); - метод объекта, а не статический.

1

setTimeInMillis() не является статическим. Причина, по которой вам нужно вызвать метод getInstance() для возврата экземпляра, заключается в том, что существует несколько методов getInstance(), и вы можете вызывать их для разных часовых поясов и/или разных локалей, чем по умолчанию. Какой часовой пояс или локаль вы выбираете, влияет на то, как работают другие методы.

Смежные вопросы