Java新的Date()打印

时间:2011-08-29 12:29:43

标签: java

刚刚学习Java,我知道这可能听起来很愚蠢,但我不得不问。

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

我知道参数中的任何内容都转换为字符串,结束值是, new Date()返回对Date对象的引用。那怎么打印呢?

Mon Aug 29 13:22:03 BST 2011

我唯一能想到的是,函数解析所有数据成员,它们的值将它们转换为String并打印出来。

如果不是,它是如何工作的?

由于

7 个答案:

答案 0 :(得分:9)

方法System.out.print(obj);调用对象的.toString()方法。由类来定义该方法,因为它喜欢。如果对象为null,则打印“null”。

如果类没有定义自己的.toString()方法,则适用Object类的默认实现,基本上打印@后跟哈希码。

答案 1 :(得分:4)

当您打印某些内容时,将调用该对象的toString()方法。因此,由个别类来提供有意义的实现。

供参考,见

这是Date的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();
}

答案 2 :(得分:2)

Object有一个toString(),它是对象的文本化表示。所有java对象都隐式或显式扩展Object。有些课程已经覆盖了toString()方法(例如java.util.Date)。

所以,当你这样做时:

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

它被“松散地”翻译为

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

这是Java的默认行为。


实际上,来自out.println()的{​​{1}}会调用System,(在内部,在代码中)会调用PrintStream.println(Object x)

如果子类Object不覆盖return (x == null)? "null" : x.toString()方法,则调用toString()方法(因为所有类隐式或显式扩展Object.toString)。

答案 3 :(得分:1)

默认情况下,调用对象的toString()方法。

答案 4 :(得分:0)

Java中的每个对象都从Object扩展。 Object定义了一个方法toString,它负责将对象转换为字符串表示。

在大多数JVM中,Object中的默认实现返回完整的类名,后跟“@”和十六进制数,表示JVM中唯一的对象实例。

Date对象会覆盖toString方法,返回您看到的字符串。

答案 5 :(得分:0)

print方法隐式调用新日期对象上的toString方法。 toString中定义了Object,但在日期中已覆盖here

通常:每次在需要String的地方使用对象时,toString方法都会自动调用。

答案 6 :(得分:0)

System.out.println接受一个对象作为参数。如前所述,所有Java类都从Object继承。这个Object类包含一个'toString'方法,而println方法只是从对象中调用toString方法。由于所有类都继承自Object,因此每个类都有一个可以调用的toString方法。