Добрый день! Прошу помочь разобраться, а то в голове образовалась путаница. 1) Если взять статью про StackTrace то там указано, что стек хранит в себе вызываемые методы, после завершения метода, удаляет его из себя и нам дан пример:
public class ExceptionExample
{
  public static void main(String[] args)
  {
    method1();
  }

  public static void method1()
  {
    method2();
  }

  public static void method2()
  {
    method3();
  }

  public static void method3()
  {
    StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
    for (StackTraceElement element : stackTraceElements)
    {
       System.out.println(element.getMethodName());
    }
  }
}
насколько я понимаю, массив StackTraceElement[] должен содержить [0 - main, 1 - method1, 2 - method2, 3 - method3, 4 - getStackTrace], после получения стека и вывода на экран через for each, массив должен быть выведен от 0 к последнему элементу и должен дать результат: Должно быть Есть на самом деле main getStackTrace method1 method3 method2 method2 method3 method1 getStackTrace main Почему так, что я не понимаю? =) 2) В задаче:
package com.javarush.task.task09.task0902;

/*
И снова StackTrace
*/

public class Solution {
    public static void main(String[] args) {
        method1();
    }

    public static String method1() {
        method2();
        return Thread.currentThread().getStackTrace()[2].getMethodName();
        //напишите тут ваш код
    }

    public static String method2() {
        method3();
        return Thread.currentThread().getStackTrace()[2].getMethodName();
        //напишите тут ваш код
    }

    public static String method3() {
        method4();
        return Thread.currentThread().getStackTrace()[2].getMethodName();
        //напишите тут ваш код
    }

    public static String method4() {
        method5();
        return Thread.currentThread().getStackTrace()[2].getMethodName();
        //напишите тут ваш код
    }

    public static String method5() {
        return Thread.currentThread().getStackTrace()[2].getMethodName();
        //напишите тут ваш код
    }
}
Почему стек каждого методы с элементом массива 2, содержит метод который его вызвал, на примере 4 метода, насколько я понимаю, стек массив должен иметь в себе [0 - main, 1 - method1, 2 - method2, 3 - method3, 4 - method4] и 2 элемент стека будет method2, который не является методом, который вызвал method4. Объясните, пожалуйста, на пальцах) 3) Задача на стек трейс длиной 10 вызовов так же запутала:
package com.javarush.task.task09.task0904;

/*
Стек-трейс длиной 10 вызовов
*/

public class Solution {
    public static void main(String[] args) {
        int stackTraceLength = method1().length - method10().length + 1;

    }

    public static StackTraceElement[] method1() {
        return method2();
    }

    public static StackTraceElement[] method2() {
        //напишите тут ваш код
        return method3();
    }

    public static StackTraceElement[] method3() {
        //напишите тут ваш код
        return method4();
    }

    public static StackTraceElement[] method4() {
        //напишите тут ваш код
        return method5();
    }

    public static StackTraceElement[] method5() {
        //напишите тут ваш код
        return method6();
    }

    public static StackTraceElement[] method6() {
        //напишите тут ваш код
        return method7();
    }

    public static StackTraceElement[] method7() {
        //напишите тут ваш код
        return method8();
    }

    public static StackTraceElement[] method8() {
        //напишите тут ваш код
        return method9();
    }

    public static StackTraceElement[] method9() {
        return method10();
    }

    public static StackTraceElement[] method10() {

        return Thread.currentThread().getStackTrace();
    }
}
Почему длина стека первого метода составляет 12, а десятого 3? Насколько я понял, должно быть наоборот, так как до вызова первого метода работают main, StackTrace и method1, а в 10 методе работают main, StackTrace и еще 10 методов. Буду очень признателен за помощь с разбором этой каши, если возможно, наиболее понятным языком. Спасибо большое.