Примечание. Это не домашнее задание, а бесплатный курс, доступ к которому может получить каждый.Курс можно найти по адресу: 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?