public static class Runner {
Stopwatch stopwatch;
private String name;
private int speed;
public Runner(String name, int speed) {
this.name = name;
this.speed = speed;
this.stopwatch = new Stopwatch(this); // 9
}
...
public static class Stopwatch extends Thread {
private Runner owner;
private int stepNumber;
public Stopwatch(Runner runner) {
this.owner = runner;
}
smolskyd
36 уровень
Поясните 9-ю строку плиз
Обсуждается
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hidden #598481
16 ноября 2022, 08:36
this в обычном методе ссылается на объект, у которого этот метод вызван.
this в конструкторе ссылается на объект, который этим конструктором создаётся.
Может возникнуть вопрос, как на него можно ссылаться, если он только создаётся, но тут всё достаточно просто: сначала происходит создание "пустого" объекта с незаполненными полями, т.е. в т.н. "куче" создаётся объект, переменной this присваивается ссылка на него, и только потом исполняется всё остальное тело конструктора (заполнение полей значениями и прочая логика).
Чтобы в этом убедиться, можешь поставить брейкпоинт на самую первую строку конструктора Runner (this.name = name;), написать в мейне new Runner(name, speed); и увидеть, что ещё до исполнения первой команды this уже на что-то ссылается. Вернее, не на "что-то", а на твоего нового бегуна.
А этот бегун, т.е. объект класса Runner, служит аргументом в конструкторе секундомера, и для этого при создании секундомера мы посылаем ему ссылку this.
0
Михаил
15 ноября 2022, 20:04
Перекрестная ссылка.
При создании ссылки на класс Stopwatch используется ссылка на самого себя как класса.
0