剛剛學習Java,我知道這聽起來很愚蠢,但我不得不問。Java新日期()打印
System.out.print(new Date());
我知道,無論是在參數被轉換成字符串,結束值即, new Date()
返回到日期對象的引用。那麼它是如何打印這個的?
Mon Aug 29 13:22:03 BST 2011
我能想到的唯一辦法就是通過函數解析所有的數據成員,將它們的值轉換成字符串並打印出來。
如果不是如何工作?
謝謝
剛剛學習Java,我知道這聽起來很愚蠢,但我不得不問。Java新日期()打印
System.out.print(new Date());
我知道,無論是在參數被轉換成字符串,結束值即, new Date()
返回到日期對象的引用。那麼它是如何打印這個的?
Mon Aug 29 13:22:03 BST 2011
我能想到的唯一辦法就是通過函數解析所有的數據成員,將它們的值轉換成字符串並打印出來。
如果不是如何工作?
謝謝
當您打印某些內容時,將調用該對象的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();
}
Java中的每個對象都從Object擴展而來。 Object定義了一個方法toString,它負責將對象轉換爲字符串表示。
Object中的默認實現在大多數JVM上返回完整的類名稱,後跟「@」和十六進制數字,表示JVM中的唯一對象實例。
Date對象重寫toString方法,返回您看到打印的字符串。
print
方法隱式地在新的日期對象上調用toString
方法。 toString
在Object
中定義,但在文檔here中的Date中被覆蓋。
一般情況:每次在預期字符串的地方使用對象時,將自動調用toString
方法。
默認情況下調用該對象的toString()
方法。
System.out.print(obj);
調用對象的.toString()
方法的方法。按照喜歡的方式定義該方法由班級決定。如果對象是null
,則打印「null」。
如果該類未定義自己的.toString()
方法,則應用Object
類的默認實現,該類實際上會打印@
後跟哈希碼。
System.out.println接受一個對象作爲參數。正如在所有Java類繼承Object之前所說的那樣。這個Object類包含一個'toString'方法,而println方法只是從該對象調用toString方法。由於所有類都從Object繼承,因此每個類都有一個可以調用的toString方法。
Object
有一個toString()
,它是對象的文本化表示。所有的java對象都會隱式或顯式地擴展Object。有些類已經覆蓋了toString()
方法(如java.util.Date
)。
所以,當你這樣做:
System.out.println(new Date());
它的 「鬆散」 譯爲
System.out.println(new Date().toString());
這是Java的默認行爲。
實際上,從System
的out.println()
調用PrintStream.println(Object x)
,其(在內部,在代碼),莫非(return (x == null)? "null" : x.toString()
)。
如果子類別的對象沒有覆蓋toString()
方法,則會調用Object.toString
方法(因爲所有類都隱式或明確地擴展了Object
)。
非常感謝。有意義 –
我希望書籍,提及實際發生的事情。他們應該能夠預測初學者會問的問題。 你的解釋很明顯,謝謝。 –
謝謝,現在理解:) –