首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于伯克利数据结构的问题--免费在线课程(CS61B) --关于Java中静态变量的教程问题

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

Stack Overflow用户
提问于 2018-12-08 10:29:13
回答 1查看 111关注 0票数 0

注:这不是作业作业,而是任何人都可以进入的免费课程。

这门课程可以在:https://sp18.datastructur.es/index.html找到

教程中的问题可以在:https://sp18.datastructur.es/materials/discussion/examprep02sol.pdf上找到

另外,为了混淆潜在的学生,变量被命名为这样,我决定不改变它,因为我担心更改代码会导致不同的输出。另外,一些变量( keep )和方法调用根本没有使用,但是为了保持原来的问题,我保留了它。

Q1编写主方法执行后将打印出来的内容。绘制方框和指针图可能有助于跟踪变量(Spring‘15,MT1)

代码语言:javascript
复制
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?我知道齿轮是一个静态变量,但是当使用第二个构造函数时,根本不应该涉及值100。我原以为静态变量爆炸会被设置为200,然后200 += 200将导致静态变量爆炸为400对于所有的休克类的实例。为什么是gear.bang 300呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-08 10:33:15

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

starter()打电话给new Shock()

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53681615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档