java - 关于伯克利数据结构免费在线课程(CS61B)关于Java中静态变量的教程问题
问题描述
注意:这不是家庭作业,而是任何人都可以访问的免费课程。
该课程可在以下网址找到: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 代替?
解决方案
第二个构造函数调用starter()
.
starter()
来电new Shock()
。
构造Shock()
函数将 bang 设置为 100。然后将 200 添加到 bang。所以bang是300。
推荐阅读
- c# - 使用相同的变量名或空检查切换对象类型失败?
- javascript - 这种合并排序的迭代实现是否正确?
- angular - “可观察”类型上不存在属性“地图”
' - java - 如果缺少 jar,使用“jpackage”创建的可执行文件会静默失败
- c# - 我的 Xaml cs 文件找不到我的 xaml 文本框 UWP
- bash - 在 bash 中回显的函数中返回值
- rstudio - Rstudio:鼠标跟随焦点?
- amazon-web-services - 避免在 AWS Lambda 中花费等待时间
- c++ - 与 Rust 的 include_str 等效的 C++ 宏
- flutter - 为什么颤动中的文本小部件不显示字母和数字的组合