Вопрос о бесплатном онлайн-курсе Berkeley Data Structures (CS61B). Учебный вопрос по статическим переменным в Java - PullRequest
0 голосов
/ 08 декабря 2018

Примечание. Это не домашнее задание, а бесплатный курс, доступ к которому может получить каждый.Курс можно найти по адресу: https://sp18.datastructur.es/index.html
Учебный вопрос можно найти по адресу: https://sp18.datastructur.es/materials/discussion/examprep02sol.pdf

Кроме того, переменные названы так, чтобы сбить с толку потенциальных студентов, и я решилне менять его из-за боязни изменить код, что приведет к другому выводу.Кроме того, некоторые переменные (baby) и вызовы методов вообще не использовались, но я сохранил их, чтобы сохранить исходный вопрос.

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 приведет к тому, что статическая переменная bang будет равна 400 для всех экземпляров класса Shock.Почему вместо него gear.bang 300?

1 Ответ

0 голосов
/ 08 декабря 2018

Второй конструктор вызывает starter().

starter() звонки new Shock().

Конструктор Shock() устанавливает bang на 100. Затем 200 добавляется к bang.Так что взрыв 300.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...