Ответ
Java предоставляет следующие ключевые механизмы для обработки исключений:
-
Блок
try-catch. Базовый механизм для перехвата и обработки исключений.try { FileReader file = new FileReader("data.txt"); } catch (FileNotFoundException e) { System.err.println("Файл не найден: " + e.getMessage()); // Восстановление или логирование } -
Блок
finally. Гарантирует выполнение кода (например, для освобождения ресурсов) независимо от того, было выброшено исключение или нет.BufferedReader br = null; try { br = new BufferedReader(new FileReader("file.txt")); } catch (IOException e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (IOException e) { /* игнорируем */ } } } -
Оператор
throws. Объявляет, что метод может выбросить проверяемое исключение (checked exception), не обрабатывая его внутри.public void readConfig() throws IOException, ConfigurationException { // Код, который может вызвать эти исключения } -
Оператор
try-with-resources(с Java 7). Автоматически закрывает ресурсы, реализующие интерфейсAutoCloseable. Устраняет шаблонный код и потенциальные утечки.try (FileInputStream fis = new FileInputStream("file.txt"); BufferedReader br = new BufferedReader(new InputStreamReader(fis))) { System.out.println(br.readLine()); } // fis и br будут закрыты автоматически здесь -
Multi-catch (с Java 7). Позволяет перехватывать несколько типов исключений в одном блоке
catch.try { // код, который может выбросить разные исключения } catch (IOException | SQLException e) { // Обработка для обоих типов исключений logger.log(Level.SEVERE, "Ошибка ввода-вывода или БД", e); } -
Создание пользовательских исключений. Наследование от
Exception(проверяемое) илиRuntimeException(непроверяемое).public class InsufficientFundsException extends RuntimeException { public InsufficientFundsException(String message) { super(message); } }