При возникновении необработанного исключения в JVM виртуальная машина немедленно завершает все выражения, инструкции, вызовы методов и конструкторов, инициализаторы и выражения инициализации полей, которые были начаты, но не завершены в текущем потоке. 1
Затем JVM просматривает стек вызовов в поисках подходящего обработчика (блока catch). 3 Если такой обработчик найден, ссылка на исключение сохраняется из стека в переменную, и выполняется логика catch. 5
Если подходящего обработчика нет, JVM прерывает выполнение текущего фрейма и ищет обработчик в предыдущем фрейме. 5 Виртуальная машина проходит через все фреймы, выполняя все обработчики finally, обнаруженные по пути. 5
Если не найден ни один обработчик, выполнение программы прекращается. 5 При этом JVM создаёт объект-исключение со всей информацией о произошедшей ошибке, включая стек трассировки (stack trace) — последовательность вызовов методов, приведших к проблеме. 3