我正在使用教程“学习Java”。其中一个课程涉及构造函数调用构造函数。 课后,我做了一些玩“奇怪的东西”,我无法弄清楚发生了什么。 我附上了从Eclipse屏幕捕获的图像文件。 (不要讨厌)。 我认为这会更好,因为它显示了输出屏幕。 我希望第一次在第二个构造函数中打印时,“name”是“Arnie”。
为什么是“伯蒂”?
class Machine {
private String name;
private int code;
public Machine() {
this("Arnie", 0);
System.out.println("First constructor running: " + name);
}
public Machine(String name) {
this("Arnie", 0);
System.out.println("Second constructor running before 'this.name': " + name);
this.name = name;
System.out.println("Second constructor running after 'this.name': " + name);
}
public Machine(String name, int code) {
this.name = name;
this.code = code;
System.out.println("Third constructor running: " + name + " " + code);
}
}
public class Application {
public static void main(String[] args) {
Machine machine1 = new Machine();
Machine machine2 = new Machine("Bertie");
Machine machine3 = new Machine("Chalkie", 7);
}
}
答案 0 :(得分:2)
它正在打印传递给构造函数的name
变量。让一切都一样,你会看到" Artie"如果您要将name
更改为this.name
。
答案 1 :(得分:0)
原因是采用name
参数的构造函数遮蔽了属性String name
。将构造函数参数更改为name
以外的值,或将第12行和第14行更改为this.name
。