-1

当我打电话System.out.println(new Date());时,我不是在调用类中的构造函数Date吗?如果我错了,请纠正我。那么在那种情况下它是如何返回值的呢?

4

4 回答 4

3

它会打印一个值,因为您正在隐式调用toString新构造Date对象的方法。

这等效于以下内容:

Date date = new Date();  
System.out.println(date);
于 2013-05-23T14:04:51.753 回答
2

当然,您正在调用 Date 构造函数。每次使用“new”运算符时,都会调用一个构造函数。您只是没有存储对新创建对象的引用,因此它很快就会被垃圾收集。所以会发生什么:

  1. 日期构造函数被调用
  2. Date 的实例被传递给接受 Object 参数的 println 方法
  3. println 方法在日期上调用 toString() 方法并获取字符串表示形式;打印它
  4. 方法返回,日期实例被垃圾收集(最终)
于 2013-05-23T14:06:08.757 回答
1

如前所述,您确实在调用该类的构造函数Date(),并隐式调用其toString()方法。如果您想知道该方法的作用,请查看此处

构造函数只是以毫秒(通常是几十毫秒,显然)为单位获取系统时间long,并toString()通过引用其中可用的方法对其进行解析,sun.util.calendar.CalendarDate然后生成一个 StringBuilder 对象,最终返回给您。

因此,当您调用Date()对象的构造函数(并隐式调用其toString()方法)时,实际上还有很多事情要做。如果您的动机是构建自己的日期解析器,您可以查看相关类的源代码以获取指导,或者您可以简单地调用这些类并让它们完成工作。

于 2013-05-23T14:35:27.170 回答
0

new Date()是一个构造函数调用的表达式。

这种表达式的结果保证是一个新构造的对象。(或例外)

于 2013-05-23T14:04:10.287 回答