Не понимаю - getStackTrace()[2] , объясните пожалуйста?
Vlad
18 уровень
Что это значит?
Обсуждается
Комментарии (6)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ira Tsygarova
27 апреля 2020, 19:01
Крч везде ставится
Thread.currentThread().getStackTrace()[2].getLineNumber();
потому что при раскручивали стека (выполнении методов) они удаляются из стека, следовательно "активная" функция всегда будет 1й по счёту в массиве стека
0 - сам стек трейс
1 - функция, которая вызывается 1м номером (в нашем случае method5())
2 - функция, которая вызывается 2м номером (в нашем случае method4())
3 - функция, которая вызывается 3м номером (method3())
4 - т.д по аналогии
В стек записывается порядок выполнения функций. Сначала 5я, потом 4я, потом 3я, потом 2я, 1я и main
Потому что чтобы выполнить main, нужно выполнить 1ю функцию, а до этого надо выполнить 2ю и т.д.
Каждый раз, когда функция отработала и закончилась, она удаляется из стека, следовательно активная функция будет на 1м месте в массиве, а ВЫЗЫВАЮЩАЯ её функция будет находиться на 2м. Поэтому мы везде пишем эту (см. выше) строку со 2м индексом, т.к. нам нужен номер строки в ВЫЗЫВАЮЩЕЙ функции
+7
Vlad
8 мая 2020, 18:14
Спасибо
0
Igor Chubenko Backend Developer в самозанятый
10 апреля 2020, 09:30
Все очень просто.
getStackTrace() возвращает массив StackTraceElement[]
Причем чем глубже будет вложено точка вызова, которая вызвала исключение, тем больше элементов будет в этом массиве.
+2
Vlad
10 апреля 2020, 10:27
Спасибо!
0
Ksenia MarioMaster
7 апреля 2020, 16:30полезный
в комментах к задачи объяснения на любой вкус.
ну да, тут вытянут второй елемент массива стека
+1
Vlad
10 апреля 2020, 10:27
Спасибо!
0