关于Berkeley数据结构免费在线课程(CS61B)的问题关于Java中静态变量的教程问题

时间:2018-12-08 10:29:13

标签: java constructor static

注意:这不是家庭作业,而是任何人都可以访问的免费课程。
该课程可以在以下网址找到:https://sp18.datastructur.es/index.html
可以在以下位置找到本教程的问题:https://sp18.datastructur.es/materials/discussion/examprep02sol.pdf

此外,变量的名称也是如此,以使潜在的学生感到困惑,而我决定不更改它,因为担心更改代码会导致输出不同。另外,根本没有使用某些变量(婴儿)和方法调用,但是为了保留原始问题,我保留了它。

Q1写下执行后main方法将打印的内容。绘制方框图和指针图以跟踪变量(Spring ’15,MT1)可能会有所帮助

public class Shock {
    public static int bang;
    public static Shock baby;

    public Shock() {
        this.bang = 100;
    }

    public Shock(int num) {
        this.bang = num;
        baby = starter();
        this.bang += num;
    }

    public static Shock starter() {
        Shock gear = new Shock();
        return gear;
    }

    public static void shrink(Shock statik) {
        statik.bang -= 1;
    }

    public static void main(String[] args) {
        Shock gear = new Shock(200);
        System.out.println(gear.bang); //300
        shrink(gear);
        shrink(starter());
        System.out.println(gear.bang); //99
    }
}

为什么gear.bang的值为300,而不是200 + 200?我知道gear是一个静态变量,但是使用第二个构造函数时,根本不应该涉及值100。我以为静态变量bang会被设置为200,那么200 + = 200会导致所有Shock类的实例的静态变量bang为400。为什么要选择gear.bang 300?

1 个答案:

答案 0 :(得分:1)

第二个构造函数调用starter()

starter()呼叫new Shock()

Shock()构造函数将bang设置为100。然后将200添加到bang。爆炸是300。