当我打电话System.out.println(new Date());
时,我不是在调用类中的构造函数Date
吗?如果我错了,请纠正我。那么在那种情况下它是如何返回值的呢?
问问题
175 次
4 回答
3
它会打印一个值,因为您正在隐式调用toString
新构造Date
对象的方法。
这等效于以下内容:
Date date = new Date();
System.out.println(date);
于 2013-05-23T14:04:51.753 回答
2
当然,您正在调用 Date 构造函数。每次使用“new”运算符时,都会调用一个构造函数。您只是没有存储对新创建对象的引用,因此它很快就会被垃圾收集。所以会发生什么:
- 日期构造函数被调用
- Date 的实例被传递给接受 Object 参数的 println 方法
- println 方法在日期上调用 toString() 方法并获取字符串表示形式;打印它
- 方法返回,日期实例被垃圾收集(最终)
于 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 回答