gpt4 book ai didi

类的实例变量的Java默认值未初始化为int的零

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:04:12 25 4
gpt4 key购买 nike

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

我期待 System.out.println(thistime); 在使用 setTime() 方法之前返回 00:00:00 因为我没有使用任何方法重新格式化它,但是我得到的输出是 12:00:00 AM,这等于调用 toString() 方法。为什么在初始化新对象时默认调用此方法,即使没有被调用?

最佳答案

如果您使用的是像 eclipse 这样的集成开发环境,您可能会注意到 toString() 方法附近有一个标记,上面写着 overrides java.lang.Object.toString。这是您尝试打印对象时默认调用的方法。这看起来像

 * @return  a string representation of the object.
*/
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

由于您在方法中有自己的同名定义,它会被覆盖。如果您将自己的 toString 方法重命名为其他名称,您会注意到不同之处,并且输出类似于 Time1@2a139a55

关于类的实例变量的Java默认值未初始化为int的零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33593199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com