помогите понять почему не срабатывает метод sleep если не делать явное указание Solution.this?
почему другие два метода работают нормально?
что такого особенного у sleep, что он не запускается просто?
Дмитрий Лепешко
28 уровень
решил, но не разобрался
Решен
Комментарии (7)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Маев Максим Enterprise Java Developer в Bercut
24 апреля 2019, 14:37
Подскажите пожалуйста, а почему к этому методу нельзя обратиться через Solution.sleep(1000)? В чем разница между Solution.this.sleep() и Solution.sleep()? Почему без this, ругается на "non static context" ?
+1
Дмитрий Лепешко
6 декабря 2017, 06:35
Поправьте пожалуйста, если я не прав. sleep(1000) обращается к родному для Thread методу, который, естественно, ничего на печать не выдает. Solution.this.sleep(1000) обращается уже к sleep, прописанному в Solution , который и выдает написанный нами текст.
+2
--------Master
6 декабря 2017, 07:50
sleep(1000) точно так же вызывает метод текущего объекта (this) соответствующего класса (в данном случае Solution). Т.е. разницы между этими двумя вызовами нет.
А у класса Thread метод статический, вызывается как раз через имя класса, Thread.sleep (n);.
И пример ниже с Ctrl позволяет как раз просмотреть исходный код именно вызываемого метода, убедиться, что к классу Thread обращения нет.
0
Pavlo Plynko Java-разработчик в CodeGym Expert
6 декабря 2017, 10:48решение
Похоже, статический sleep() "перекрывает" наш sleep(), поэтому приходится явно указывать Solution.this.
+8
Dmitry Deryuga
16 февраля 2019, 21:59
Подскажите, почему вообще запустились методы eat(), play()? IDEA сразу показывала на соответствующие методы Solution, что без труда позволило решить задачу. Но непонятно другое. Ведь метод someActions() это метод наследуемого (анонимного) класса Thread, не имеющего ничего общего с классом Solution? Ведь экземпляр внешнего класса запускает в мейне метод live(). Который в свою очередь создает экземпляр анонимного класса, наследуемого от Thread. И метод someActions() это метод анонимного класса. Т.е. и нить создана экземпляром Анонимного класса и в ней исполняется метод Анонимного класса. Почему же изначально оболочка тянется к методам Solution, который с анонимным классом никак не связан? Нет поля с ссылкой на экземпляр, внешний класс не наследует Thread и наоборот. Почему метод другого класса тянется с классу экземпляра создавшему экземпляр класса метода? Это напоминает как метод класса ищет поля класса. Но здесь метод одного класса ищет методы другого класса! Объясните по простому, пожалуйста!
0
Татьяна
20 января 2020, 14:21
Я думаю, это потому что что анонимный класс - это внутренний класс. В нем самом таких методов нет, в предке Thread таких методов нет, а во внешнем - есть - они и используются. Если бы нашлись в этой цепочке где-нибудь раньше, то использовались бы другие методы. А вот sleep нашёлся у Thread и нам пришлось принудительно идти выше - к нашему внешнему классу....
0
hidden #1278682
5 декабря 2017, 14:07
Напишите оба метода:
sleep(1000);
Solution.this.sleep(1000);
Зажав ctrl поочередно щелкните на каждом методе
+9