注:这不是作业作业,而是任何人都可以进入的免费课程。
这门课程可以在:https://sp18.datastructur.es/index.html找到
教程中的问题可以在:https://sp18.datastructur.es/materials/discussion/examprep02sol.pdf上找到
另外,为了混淆潜在的学生,变量被命名为这样,我决定不改变它,因为我担心更改代码会导致不同的输出。另外,一些变量( keep )和方法调用根本没有使用,但是为了保持原来的问题,我保留了它。
Q1编写主方法执行后将打印出来的内容。绘制方框和指针图可能有助于跟踪变量(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?我知道齿轮是一个静态变量,但是当使用第二个构造函数时,根本不应该涉及值100。我原以为静态变量爆炸会被设置为200,然后200 += 200将导致静态变量爆炸为400对于所有的休克类的实例。为什么是gear.bang 300呢?
发布于 2018-12-08 10:33:15
第二个构造函数调用starter()。
starter()打电话给new Shock()。
Shock()构造函数将bang设置为100。然后,200被添加到爆炸。所以砰是300。
https://stackoverflow.com/questions/53681615
复制相似问题