Java新的Date()打印

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

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

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

 Mon Aug 29 13:22:03 BST 2011 

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

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

谢谢

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

供参考,请参阅

  • Java教程:Object类

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

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

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

Object具有toString() ,它是Object的文本化表示。 所有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() )。

如果子类Object不覆盖toString()方法,则会调用Object.toString方法(因为所有类都隐式或显式扩展了Object )。

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

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

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

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

print方法隐式调用新日期对象上的toString方法。 toStringObject中定义,但在Date中被覆盖,如此处所述 。

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

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