try / catch / finally
Перехватывает исключения; finally выполняется всегда, а try с ресурсами сам их закрывает.
Доступно с: Java 1.0
Синтаксис
try { … } catch (Type e) { … } finally { … }Примеры
Перехват исключения и блок finally:
void main() {
try {
int n = Integer.parseInt("12a");
IO.println(n);
} catch (NumberFormatException e) {
IO.println("Bad number: " + e.getMessage());
} finally {
IO.println("done");
}
}Результат:
Bad number: For input string: "12a"
doneНесколько типов в одном catch:
void main() {
String[] inputs = {"5", "x", null};
for (String s : inputs) {
try {
IO.println(10 / Integer.parseInt(s.strip()));
} catch (NumberFormatException | NullPointerException e) {
IO.println(e.getClass().getSimpleName());
}
}
}Результат:
2
NumberFormatException
NullPointerExceptiontry с ресурсами закрывает объект в любом случае:
void main() {
try (var scanner = new Scanner("first line\nsecond line")) {
IO.println(scanner.nextLine());
}
}Результат:
first lineПримечания
Ветки catch проверяются сверху вниз, поэтому более конкретные типы ставят выше общих (Exception — последним). Пустой catch скрывает ошибки — хотя бы выводите сообщение.
В скобках после try можно объявить объекты, реализующие AutoCloseable (файлы, потоки, соединения): close() вызовется автоматически, даже при исключении.
См. также
- throw — Бросает исключение и прерывает выполнение метода.
- throws — Объявляет, какие проверяемые исключения может бросить метод.
- try-with-resources — Блок `try`, который сам закрывает открытые ресурсы — файлы, соединения, потоки.
- Exception — Базовый класс исключений, которые программа может перехватить и обработать.
Вопросы и ответы по теме
В учебнике
- try, catch и finally — Обработка исключений в Java — блоки try и catch, несколько catch, multi-catch, finally и выбрасывание исключений через throw.