JavaRush /Курсы /JAVA 25 SELF /Стек вызовов (Stack Trace)

Стек вызовов (Stack Trace)

JAVA 25 SELF
11 уровень , 5 лекция
Открыта

1. Введение

Stack Trace (стек вызовов) — это список методов, которые были вызваны в вашей программе до того момента, как произошла ошибка (исключение). Когда в программе возникает исключение, Java автоматически выводит стек вызовов на экран. Это как "следы на снегу": вы видите, по каким шагам программа пришла к ошибке.

Аналогия:
Представьте, что вы идёте по лабиринту и вдруг упираетесь в стену. Stack trace — это карта, показывающая, по каким коридорам вы шли, прежде чем заблудиться.

Как выглядит Stack Trace?

Когда в программе возникает ошибка, Java выводит примерно такое сообщение:

Exception in thread "main" java.lang.ArithmeticException: / by zero
    at Main.divide(Main.java:10)
    at Main.main(Main.java:5)

Что здесь написано?

  • Exception in thread "main" — в каком потоке произошла ошибка (обычно "main").
  • java.lang.ArithmeticException: / by zero — тип исключения и его сообщение.
  • at Main.divide(Main.java:10) — метод divide в классе Main, строка 10.
  • at Main.main(Main.java:5) — метод main в классе Main, строка 5.

Каждая строка at ... — это шаг в стеке вызовов. Самая верхняя строка — место, где произошла ошибка. Ниже — методы, которые вызвали этот метод, и так далее до самого начала программы.

2. Как читать Stack Trace?

Шаг 1. Найдите тип исключения и сообщение

Первая строка всегда содержит тип ошибки и её описание:

java.lang.ArithmeticException: / by zero

Это уже подсказка: ошибка связана с делением на ноль.

Шаг 2. Смотрите на первую строку "at ..."

Это место, где фактически произошла ошибка:

at Main.divide(Main.java:10)

Значит, ошибка случилась в методе divide класса Main на 10-й строке.

Шаг 3. Поднимайтесь вверх по стеку

Следующая строка показывает, кто вызвал этот метод:

at Main.main(Main.java:5)

Значит, метод main вызвал divide, и ошибка "поднялась" вверх. Номер строки — 5.

Шаг 4. Ищите свои классы

В длинном стеке вызовов часто бывают системные методы (например, из пакетов java.util, java.io).
Ваши классы обычно ближе к началу списка. Смотрите на имена классов и файлов — ищите свои!

3. Пример: разбор реального Stack Trace

Код:

public class Main 
{
    public static void main(String[] args) 
    {
        int result = divide(10, 0);
        System.out.println("Результат: " + result);
    }

    public static int divide(int a, int b) 
    {
        return a / b;
    }
}

Ошибка:

Exception in thread "main" java.lang.ArithmeticException: / by zero
    at Main.divide(Main.java:8)
    at Main.main(Main.java:3)

Разбираем:

  • Ошибка: деление на ноль (ArithmeticException).
  • Произошла в методе divide на строке 8.
  • Вызвана из метода main на строке 3.

Что делать?
Открываем файл Main.java, смотрим строку 8 — находим деление на ноль. Исправляем!

4. Stack Trace с несколькими методами

Код:

public class Main 
{
    public static void main(String[] args) 
    {
        process();
    }

    public static void process() 
    {
        calculate();
    }

    public static void calculate() 
    {
        int[] arr = {1, 2, 3};
        System.out.println(arr[10]); // Ошибка!
    }
}

Ошибка:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 3
    at Main.calculate(Main.java:11)
    at Main.process(Main.java:7)
    at Main.main(Main.java:3)

Разбираем:

  • Ошибка: выход за границы массива (ArrayIndexOutOfBoundsException).
  • Произошла в calculate (строка 11).
  • Вызвана из process (строка 7).
  • Вызвана из main (строка 3).

Вывод:
Stack trace показывает весь путь, по которому программа пришла к ошибке.

5. Типичные ошибки при работе со Stack Trace

Ошибка №1: Игнорирование Stack Trace.
Новички часто просто смотрят на "красную ошибку" и не читают стек вызовов. Не делайте так! Stack trace — это подсказка, где искать баг.

Ошибка №2: Путают строку с ошибкой и строку с местом ошибки.
Важно: первая строка — тип ошибки, а место ошибки — в первой строке at ....

Ошибка №3: Ищут ошибку в системных классах.
Если видите строки типа at java.base/java.util.Scanner.nextInt(Scanner.java:123), не спешите лезть в исходники Java. Смотрите, кто вызвал этот метод в вашем коде.

Ошибка №4: Не используют номера строк.
Номер строки — ваш лучший друг. Откройте файл, найдите нужную строку — и увидите ошибку.

Ошибка №5: Не понимают, что Stack Trace — это "путь".
Stack trace показывает, как программа пришла к ошибке. Иногда баг не в самой верхней строке, а в том, как вы вызвали метод.

1
Задача
JAVA 25 SELF, 11 уровень, 5 лекция
Недоступна
Кулинарный калькулятор и его неприятный сюрприз 🥧
Кулинарный калькулятор и его неприятный сюрприз 🥧
1
Задача
JAVA 25 SELF, 11 уровень, 5 лекция
Недоступна
Герой и его несуществующий артефакт в инвентаре 🏹
Герой и его несуществующий артефакт в инвентаре 🏹
1
Задача
JAVA 25 SELF, 11 уровень, 5 лекция
Недоступна
Детектив кода: расследование сбоя в системе отчетов 📉
Детектив кода: расследование сбоя в системе отчетов 📉
1
Задача
JAVA 25 SELF, 11 уровень, 5 лекция
Недоступна
Глубокое погружение: анализ сбоя в многоуровневой системе 🪆
Глубокое погружение: анализ сбоя в многоуровневой системе 🪆
1
Опрос
Исключения, 11 уровень, 5 лекция
Недоступен
Исключения
Исключения
Комментарии (8)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Алексей Уровень 18
29 января 2026
Странно, в задаче "Глубокое погружение: анализ сбоя в многоуровневой системe" пришлось два раза запускать проверку для успешного тестирования
Олег Сычев Уровень 15
15 февраля 2026
Тоже самое и именно в этой задаче. Проверочный ИИ сначала сказал, что IDE подавляет Stack Trace (хотя ничего такого не было и Stack Trace был корректно выведен). Ничего в коде не менял - запустил проверку еще раз - и она успешно прошла проверку.
Anonymous #6442887 Уровень 22
16 января 2026
Трудновато однако :-) но тем интереснее, надеюсь в голове что-то останется
Javahue Уровень 16
3 декабря 2025
Перед валидацией запускайте задачу.
Riga Уровень 29
1 ноября 2025
Такое ощущение, что все эти статьи написаны ИИ, ошибки за ошибкой. JavaRush ну Вы чего? Вы же топ 1 в СНГ по Java. Разочаровываете. Хоть к старой базе переходи. Где с душой что-ли написано было.
Алексей Уровень 36
31 октября 2025
В лекции не правильно указаны строки в которых произходит ошибка Пример 3: Ошибка происходит на строке 11 а не 8 и вызов метода на строке 5 а не 3. Пример 4: Ошибка происходит на строке 16 а не 11 и вызов методов на строке 10 и 5 а не 7 и 3.
Xaxatumba Уровень 38
7 ноября 2025
Код вставили в статью без указания package, import и т.п.. Вот тебе и нестыковка с нумерацией строк вставленного кода и стека.
Александр Уровень 50
10 октября 2025
В пунктах 3 и 4 что-то странное - не бьется нумерация в консоли с нумерацией Main.java