Ответ
Начиная с Java 7, можно перехватывать несколько исключений в одном блоке catch, разделяя их типы вертикальной чертой |.
Синтаксис и пример:
try {
// Код, который может выбросить разные исключения
Files.copy(source, target); // Может выбросить IOException
executeDatabaseQuery(); // Может выбросить SQLException
} catch (IOException | SQLException e) {
// Обработка для обоих типов исключений
logger.error("Ошибка операции ввода-вывода или базы данных", e);
throw new ApplicationException("Operation failed", e);
}
Ключевые правила:
- Исключения в списке должны быть непересекающимися (нельзя
catch (Exception | IOException e), так какIOExceptionуже является подклассомException). - Переменная исключения (
e) будет иметь тип ближайшего общего предка для всех перечисленных типов. В примере выше этоException. - Внутри блока
catchвы не можете делать предположения о более конкретном типе, чем объявлено. Для разной логики под разные типы используйте отдельные блокиcatch.