2011-08-29 166 views
0

剛剛學習Java,我知道這聽起來很愚蠢,但我不得不問。Java新日期()打印

System.out.print(new Date()); 

我知道,無論是在參數被轉換成字符串,結束值即, new Date()返回到日期對象的引用。那麼它是如何打印這個的?

Mon Aug 29 13:22:03 BST 2011 

我能想到的唯一辦法就是通過函數解析所有的數據成員,將它們的值轉換成字符串並打印出來。

如果不是如何工作?

謝謝

回答

4

當您打印某些內容時,將調用該對象的toString()方法。所以這是由個人班級來提供有意義的實施。

僅供參考,請參閱

這是日期的toString()方法:

public String toString() { 
// "EEE MMM dd HH:mm:ss zzz yyyy"; 
BaseCalendar.Date date = normalize(); 
StringBuilder sb = new StringBuilder(28); 
int index = date.getDayOfWeek(); 
if (index == gcal.SUNDAY) { 
    index = 8; 
} 
convertToAbbr(sb, wtb[index]).append(' ');   // EEE 
convertToAbbr(sb, wtb[date.getMonth() - 1 + 2 + 7]).append(' '); // MMM 
CalendarUtils.sprintf0d(sb, date.getDayOfMonth(), 2).append(' '); // dd 

CalendarUtils.sprintf0d(sb, date.getHours(), 2).append(':'); // HH 
CalendarUtils.sprintf0d(sb, date.getMinutes(), 2).append(':'); // mm 
CalendarUtils.sprintf0d(sb, date.getSeconds(), 2).append(' '); // ss 
TimeZone zi = date.getZone(); 
if (zi != null) { 
    sb.append(zi.getDisplayName(date.isDaylightTime(), zi.SHORT, Locale.US)); // zzz 
} else { 
    sb.append("GMT"); 
} 
sb.append(' ').append(date.getYear()); // yyyy 
return sb.toString(); 
} 
+0

謝謝,現在理解:) –

0

Java中的每個對象都從Object擴展而來。 Object定義了一個方法toString,它負責將對象轉換爲字符串表示。

Object中的默認實現在大多數JVM上返回完整的類名稱,後跟「@」和十六進制數字,表示JVM中的唯一對象實例。

Date對象重寫toString方法,返回您看到打印的字符串。

0

print方法隱式地在新的日期對象上調用toString方法。 toStringObject中定義,但在文檔here中的Date中被覆蓋。

一般情況:每次在預期字符串的地方使用對象時,將自動調用toString方法。

1

默認情況下調用該對象的toString()方法。

9

System.out.print(obj);調用對象的.toString()方法的方法。按照喜歡的方式定義該方法由班級決定。如果對象是null,則打印「null」。

如果該類未定義自己的.toString()方法,則應用Object類的默認實現,該類實際上會打印@後跟哈希碼。

0

System.out.println接受一個對象作爲參數。正如在所有Java類繼承Object之前所說的那樣。這個Object類包含一個'toString'方法,而println方法只是從該對象調用toString方法。由於所有類都從Object繼承,因此每個類都有一個可以調用的toString方法。

2

Object有一個toString(),它是對象的文本化表示。所有的java對象都會隱式或顯式地擴展Object。有些類已經覆蓋了toString()方法(如java.util.Date)。

所以,當你這樣做:

System.out.println(new Date()); 

它的 「鬆散」 譯爲

System.out.println(new Date().toString()); 

這是Java的默認行爲。


實際上,從Systemout.println()調用PrintStream.println(Object x),其(在內部,在代碼),莫非(return (x == null)? "null" : x.toString())。

如果子類別的對象沒有覆蓋toString()方法,則會調用Object.toString方法(因爲所有類都隱式或明確地擴展了Object)。

+0

非常感謝。有意義 –

+0

我希望書籍,提及實際發生的事情。他們應該能夠預測初學者會問的問題。 你的解釋很明顯,謝謝。 –