java - 关于 Berkeley Data Structures 免费在线类(class) (CS61B) 关于 Java 中静态变量的教程问题

标签 java constructor static

注意:这不是家庭作业,而是任何人都可以访问的免费类(class)。
该类(class)可以在以下位置找到: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。

关于java - 关于 Berkeley Data Structures 免费在线类(class) (CS61B) 关于 Java 中静态变量的教程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53681615/

相关文章:

java - 我正在使用 .hashCode() 创建哈希值。 Java 中是否有一个库可以执行双重哈希来解决冲突?

java - 正则表达式 Java(标点符号)

C++ 类 : Is it possible to select a member's constructor in a constructor body?(没有双重初始化成员)

Javascript 构造函数 : Accessing outside variable

java - 关于何时可以在类定义中调用静态方法的约束背后的推理

java - Android Studio Value 不会传递给其他 Activity

c++ - 在构造函数中调用不同类的构造函数?

java - 为什么不调用从返回 null 的静态方法链接的静态变量抛出 NPE?

c++ - 类中的静态变量和内存分配及其使用

java - Java Deflate 的静态字典