try / catch / finally
Исключение — это сигнал об ошибке во время работы программы. Java не падает молча: она «бросает» исключение, которое всплывает вверх, пока кто-то его не поймает. Поймал → программа живёт. Не поймал → падает.
try {
int x = 10 / 0; // тут возникнет ошибка
} catch (ArithmeticException e) {
System.out.println("Поймали: " + e.getMessage());
} finally {
System.out.println("Выполнится в любом случае");
}
finally выполняется всегда — поймали исключение или нет. Туда кладут код, который обязан отработать (закрыть файл, освободить ресурс).
Под капотом
Раскрутка стека (stack unwinding). Если метод бросил исключение и сам его не поймал, JVM снимает его фрейм со стека и ищет catch в вызвавшем методе — и так вверх по стеку вызовов, пока не найдёт подходящий catch. Не нашла нигде — поток завершается и печатается stack trace.
🎤 Закрыл тему, если можешь объяснить:
• что такое исключение, что делают try/catch/finally;
• как работает раскрутка стека при непойманном исключении (если дошёл до 3-го слоя).
• как работает раскрутка стека при непойманном исключении (если дошёл до 3-го слоя).