这是我从我的java教程开始研究的一个示例。 我有一个没有构造函数的Time1类,因此我期待它将默认值初始化为int,即零。类的实例变量的Java默认值未初始化为零
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()
方法返回00:00:00因为我没有使用任何方法来进行格式化之前应有System.out.println(thistime);
,但是我得到的输出为12:00:00 AM,这相当于调用toString()
方法。为什么在新对象初始化时默认调用此方法,即使没有被调用?
为什么你期待'00:00:00'?你是否期望Java自动调用'toUniversalString'? – user2357112
基本上,当你传递一个'Object'打印,像这样:'的System.out.println(对象)',它真的只是做'的System.out.println(Object.toString())' – Zizouz212
@ user2357112,我不知道是什么方法被调用,为什么/如何,因此这个问题。谢谢你Zizouz212 – scott