Что произойдет в Java-программе, если возникшее исключение не будет обработано?

«Что произойдет в Java-программе, если возникшее исключение не будет обработано?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Программа аварийно завершится. Неперехваченное (uncaught) исключение поднимается по стеку вызовов. Если оно достигает потока main и там нет обработчика, поток завершается, а JVM печатает трассировку стека (stack trace) в стандартный поток ошибок.

Пример и последствия:

public class Example {
    public static void main(String[] args) {
        methodA();
        System.out.println("Эта строка никогда не выполнится.");
    }
    static void methodA() { methodB(); }
    static void methodB() { int x = 10 / 0; } // ArithmeticException
}

Вывод в консоль:

Exception in thread "main" java.lang.ArithmeticException: / by zero
    at Example.methodB(Example.java:7)
    at Example.methodA(Example.java:6)
    at Example.main(Example.java:3)

Почему это плохо:

  • Пользователь видит техническую ошибку вместо понятного сообщения.
  • Критический код (закрытие ресурсов, фиксация транзакций) после исключения не выполняется.
  • В серверных приложениях это приводит к HTTP-ответу 500 Internal Server Error.

Решение: Всегда обрабатывайте исключения с помощью try-catch или явно объявляйте их в сигнатуре метода с throws, чтобы контролировать поток выполнения.