2013-05-23 2 views
-1

Когда я звоню System.out.println(new Date()); Я не называю конструктор в классе Date? Пожалуйста, поправьте меня, если я ошибаюсь. Так в таком случае, как это возвращает ценность?Как конструктор Date() возвращает значение

+4

Вы, который возвращает объект типа 'Date' и' println() ', неявно вызывает' toString() 'на этом объекте. –

+2

Почему это вниз? Просто просмотр вопросов по тегу java меня огорчает, большинство из них по крайней мере -1. Действительно ли люди java очень ненавидят вопросы? – arynaq

+0

@arynaq: Непонятно, что этот вопрос задает. – SLaks

ответ

1

Как уже отмечалось, вы действительно вызов конструктора для Date() класса, и неявно вызывая метод toString(). Если вы хотите знать, что этот метод делает, вам нужно посмотреть here.

Конструктор просто захватывает системное время в миллисекундах (часто в десятки миллисекунд, по-видимому) как long и toString() анализирует его, ссылаясь на методы, доступные в sun.util.calendar.CalendarDate, а затем генерируют StringBuilder объект, который в конечном счете, что возвращается вам.

Так что, пока вы вызываете конструктор для объекта Date() (и неявным образом вызываете его метод toString()), под капотом происходит еще немного больше. Если ваша мотивация заключается в создании собственного анализатора даты, вы можете просмотреть источник для участвующих классов для руководства или просто сделать вызовы для этих классов и позволить им выполнять эту работу.

0

new Date() - выражение, являющееся вызовом конструктора.

Результатом такого выражения является новый объект. (или исключение)

+0

Э-э, пока я прав, я думаю, что это не соответствует сути вопроса. – Woot4Moo

+0

@ Woot4Moo: Вы понимаете непонятный вопрос иначе, чем я. – SLaks

+0

достаточно справедливо.:) – Woot4Moo

3

Он печатает значение, потому что вы неявно вызываете метод toString нового объекта Date.

Это эквивалентно следующему:

Date date = new Date(); 
System.out.println(date); 
2

Конечно, вы звоните Дата конструктора. Каждый раз, когда вы используете «новый» оператор, вызывается конструктор. Вы просто не сохраняете ссылку на вновь созданный объект, поэтому он скоро получит сборку мусора. Так что же происходит:

  1. Дата Конструктор называется
  2. Экземпляр Дата передается Println метод, который принимает аргумент Object
  3. Println метод вызывает метод ToString() на дату и получает строку представление; печатает это
  4. метод возвращает, экземпляр даты получает garbaged собраны (в конечном счете)
Смежные вопросы