【发布时间】:2015-11-08 11:00:26
【问题描述】:
这是我在 java 教程中研究的一个示例。 我有一个没有构造函数的 Time1 类,因此我希望它使用 int 的默认值进行初始化,即零。
public class Time1 {
private int hour; // expected to be initialised with zero
private int minute; // expected to be initialised with zero
private int second; // expected to be initialised with zero
public void setTime(int hour, int minute, int second) {
if (hour < 0 || hour >= 24 || minute < 0 || minute >= 60 || second < 0 || second >= 60) {
throw new IllegalArgumentException("value out of range");
}
this.hour = hour;
this.minute = minute;
this.second = second;
}
public String toUniversalString() {
return String.format("%02d:%02d:%02d", hour, minute, second);
}
public String toString() {
return String.format("%d:%02d:%02d %s", ((hour == 0 || hour == 12) ? 12 : hour % 12), minute, second, (hour < 12 ? "AM" : "PM"));
}
}
现在我有了主课
public class Time1test {
public static void main(String[] args) {
Time1 thistime = new Time1();
System.out.println(thistime);
thistime.setTime(13, 22, 33);
System.out.println(thistime);
}
}
在使用 setTime() 方法之前,我期待 System.out.println(thistime); 返回 00:00:00,因为我没有使用任何方法重新格式化它,但是我得到的输出是 12:00:00 AM,即等于调用toString() 方法。为什么在初始化新对象时默认调用此方法,即使没有被调用?
【问题讨论】:
-
你为什么期待
00:00:00?您是否期望 Java 会自动调用toUniversalString? -
基本上,当你传递一个
Object来打印时,像这样:System.out.println(Object),它真的只是System.out.println(Object.toString()) -
@user2357112,我不知道正在调用什么方法以及为什么/如何,因此这个问题。谢谢 Zizouz212