Ответ
Да, начиная с Java 7 можно перехватывать несколько исключений в одном блоке catch. Для этого типы исключений перечисляются через вертикальную черту |.
Пример синтаксиса:
try {
// Код, который может выбросить IOException или SQLException
} catch (IOException | SQLException e) {
// Обработка обоих типов исключений
System.out.println("Произошла ошибка ввода-вывода или базы данных: " + e.getMessage());
}
Ключевые правила и особенности:
- Непересекающиеся типы: Исключения в списке не должны находиться в отношении наследования. Например,
catch (Exception | IOException e)вызовет ошибку компиляции, так какIOExceptionуже является подтипомException. - Тип переменной-исключения: Переменная
eбудет иметь тип ближайшего общего суперкласса для всех перечисленных исключений. В примере выше этоException. - Повышение читаемости: Такой подход устраняет дублирование кода обработки, когда для нескольких типов исключений логика идентична.
- Модификатор final: На переменную
eнеявно накладывается модификаторfinal, поэтому переназначить её внутри блокаcatchнельзя.