为什么第四线不会以“Arnie”结束?

时间:2018-05-16 22:14:24

标签: java constructor

我正在使用教程“学习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);
    }
}

2 个答案:

答案 0 :(得分:2)

它正在打印传递给构造函数的name变量。让一切都一样,你会看到" Artie"如果您要将name更改为this.name

答案 1 :(得分:0)

原因是采用name参数的构造函数遮蔽了属性String name。将构造函数参数更改为name以外的值,或将第12行和第14行更改为this.name