Здравствуйте, подскажите, правильно ли я понял, после того как метод завершится, этот метод убирается из стэка?
Например, мы вызвали методы в таком порядке: main-метод1-метод2-метод3-метод4-метод5-getStackTrace(). Какой метод завершится первым? getStackTrace() или метод5? Как я понял метод getStackTrace() не завершается вообще, поэтому у него всегда индекс 0. Метод5 завершается и покидает стэк, на его место встает метод4 и получает индекс 1. Если представить стопку листов, то самый верхний лист это getStackTrace(), получается он остается лежать сверху, а убираются элементы, которые под ним? Помогите разобраться, пожалуйста.
Владимир
27 уровень
Вопрос про работу стэка
Решен
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Владимир
12 ноября 2019, 16:38
И правда, ведь мы в каждом методе вызываем getStackTrace(), оттого он и становится самым верхним элементом. Спасибо большое парни, разобрался 🙂
0
dell
12 ноября 2019, 16:03
"1. Если представить стопку листов, то самый верхний лист это getStackTrace(), получается он остается лежать сверху, а убираются элементы, которые под ним?"
Берётся всегда самый верхний лист. Но что бы потом посмотреть содержание стопки, на неё кладётся спец. сканерный лист, который оказывается последним.
+1
dell
12 ноября 2019, 15:59
То есть getStackTrace() не завешается только с виду, так как он для получения стека используется. На самом деле, он такой же как и все остальные.
+1
dell
12 ноября 2019, 15:55
Завершается нулевой индекс, последний вызванный без всяких обходов – getStackTrace() или что угодно. Просто что бы получить эту инфу, ты снова вызываешь getStackTrace(), и он становиться как бы самым актуальным.
+1
YuriyExpert
12 ноября 2019, 15:28
Первым завершится последний вызванный метод. Почитайте про принцип LIFO. Если метод вызывается несколько раз, то каждый его вызов помещается в стек.
+1