И снова StackTrace

  • 6
  • Недоступна
Давайте сразу перейдем к делу: напишите 5 методов, которые вызывают друг друга. Каждый метод должен возвращать имя метода, вызвавшего его, полученное с помощью StackTrace. Это имя — дальше, чем звезды. Но мы разберемся, это всего-навсего методы, которые последовательно вызывают друг друга, и ничего более.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (213)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Alexander 9 уровень
вчера, 14:26
Нам доступна переменная "stackTraceElements" в каждом из методов из-за того, что она была объявлена в публичном классе? (если ее объявить только в самом последнем методе, имеется в виду)
Andrew Backend Developer в as
3 января, 13:28
вот и вопрос что мешает подучить индекс из общего количества включенных методов вот как вариант
stackTraceElements.length - 1 (1- шаг включенных методов)
Николай 11 уровень, Минск
10 декабря 2020, 11:55
всем удачи и терпения нажмите плюсик для ачивки :-)
Дима Сидельников 15 уровень, Варшава
6 декабря 2020, 15:13
Объяснение к другой задаче, но очень подходит и дает понять что к чему именно в этой.
Сергей 13 уровень
15 ноября 2020, 03:35
А где медиум-лвл? если с парой заданий и возникали некоторые затруднения, то здесь то совсем всё просто.
Эдуард 15 уровень, Санкт-Петербург
14 ноября 2020, 21:05
Объясните, пожалуйста, простым языком. Thread.currentThread().getStackTrace()[2].getMethodName(); Что здесь подразумевается по индексом [2] ?? Почему именно [2] ??
Andrew Perstniov 18 уровень, Одесса
16 ноября 2020, 18:49
Thread.currentThread().getStackTrace() создаст массив StackTraceElement[], в который будут входить по цепочке все методы, использование которых его вызвало, начиная с последнего. Т.е., с индексом [0] внутри этого массива будет сам getStackTrace(), с индексом [1] - метод, внутри которого он находится, а с индексом [2] - тот метод, который вызвал метод[1]
Алексей 12 уровень
6 ноября 2020, 12:06
До последнего надеялся найти способ как взять индекс текущего метода. Но в итоге пришлось ставить циферку 2... -_-
Камилла 12 уровень, Москва
7 ноября 2020, 17:03
почему так?
Павел 23 уровень, Минск
6 ноября 2020, 10:58
В методическом материале нам давали пример с циклом, в котором запрашивались из стека сразу все значения исполняемых методов (вся цепочка). В этой задаче нужно просто одной строкой вернуть из массива значений стека единственный элемент (имя метода, вызвавшего текущий метод). Индекс этого элемента всегда будет один и тот же.
🦔 Виктор админ Java Android канала в telegram @LetsCodeItExpert
31 октября 2020, 17:14
Пошла жара! : ) Вернуть Поток.текущийПоток().получитьСтековыйПуть()[индексЭлементаМассива].получитьИмяМетода(); Тут весь нюанс в том, что, оказывается, получитьСтековыйПуть() — это тоже метод, который считается в последовательности вызовов. Т. е. каждый раз, когда мы хотим получить путь стека, мы получаем массив, в котором каждый элемент — это последовательность вызванных методов. По нулевому индексу прописан сам метод, которым мы и получаем стековый путь. По первому индексу находится текущий вызванный метод. Догадываемся, по какому индексу хранится предыдущий метод ; ) -- tlgrm: LetsCodeIt / SefoNotasi
Natalya 9 уровень, Москва
27 декабря 2020, 11:45
Виктор, подскажите, какими источниками Вы пользуетесь для освоения java? Понимаю, что рекомендаций уже было много, но Вы так складно все объясняете, что стало интересно.
🦔 Виктор админ Java Android канала в telegram @LetsCodeItExpert
27 декабря 2020, 16:17
Наталья, сейчас я сконцентрировался исключительно на основном курсе ДжаваРаша. Материал отрабатываю весь: читаю все лекции, решаю последовательно каждую задачу, ничего не пропуская, открываю все ссылки и ссылки по ссылкам, на каждой странице пробегаюсь по самым информативным комментам с объяснениями и ссылками на внешние материалы, на каждой странице «конспектирую» полученное инфо в комментариях, завёл параллельно телеграм канал для совместного обучения и моральной поддержки : ) p.s. Если бы мог отмотать время назад, то просто взял бы одну книгу попроще типа Якова Файна Java для детей и параллельно курс ДжаваРаша проходил и больше бы ни на что не отвлекался. Думаю, что таким образом раза в два быстрее бы дошёл до этого момента. Мои самые большие ошибки: чтение одной книги без практики, а затем наоборот — сплошная практика без структурированной теории. Ну, и с самая бестолковая трата времени — это видео-курсы, вот уж что действительно в одно ухо влетает, а из другого вылетает. Видео-уроки хорошо смотреть когда нужно увидеть какое-то конкретное решение или технику, но не учиться по ним. Ещё не слушал бы людей, которые советуют для начала читать всяких Шилдтов, Философию джавы и Чистый код — для нулевого новичка это вредные советы и полная каша в голове. Это, конечно, всё мой частный случай, делюсь с вами как есть.
Дмитрий 11 уровень
30 октября 2020, 08:43
Все куда проще, чем кажется на первый взгляд. Есть конструкция вида
Thread.currentThread().getStackTrace();
Возвращаемое значение - массив элементов StackTraceElement (StackTraceElement[]) Если в Idea поставить точку останова в любом из методов (Ctrl + F8), выделить блок кода
Thread.currentThread().getStackTrace()
и нажать Evaluate Expression (Alt + F8), то мы увидим всё содержимое объекта: На скрине наглядно видна вся последовательность запусков. В данном случае текущий метод "method1" (элемент массива с индексом 1) запущен из "main" (элемент массива с индексом 2) Остаётся лишь вернуть наименование при помощи метода "getMethodName()":
Thread.currentThread().getStackTrace()[2].getMethodName();
Andrii Honyshko 12 уровень, Киев
19 ноября 2020, 17:49
так как вы пишите - не получаеться
Дмитрий 11 уровень
20 ноября 2020, 17:08
Что именно не получается? Можно код?
a_victorchik 16 уровень, Минск
25 ноября 2020, 16:49
А у меня вообще не срабатывает Debug(по сочетанию клавиш alt + F8).. Не могу понять в чем проблема
jimaltair 18 уровень, Калининград
19 декабря 2020, 11:16
Последовательность действий, чтобы у вас всё заработало: 1. Точка остановка - Ctrl + F8 или поставить красный кружок справа от номера строки 2. Запускаем дебаг - Shift+F9 или нажимаем значок жучка 3. Выделяем нужный блок кода
Thread.currentThread().getStackTrace()
4. Жмём Alt+F8, в появившемся окне жмём Evaluate Готово!
Александр 11 уровень, Москва
29 декабря 2020, 02:34
Странно, конкретно в этом коде после запуска дебаг, постоянно только вот это вылетает в консоли:
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
и не важно в какой строке точка остановы стоит... PS - Задачу уже решил, просто такую фишку с Alt+F8 не знал и решил потестить. И кстати я дебагом часто пользуюсь, в основном в циклах, чтобы посмотреть - правильно или нет идёт процесс и всё норм работает...