Обработка ошибочных ситуаций и исключений

Сложность: medium Тема: CON
exceptions обработка ошибок try-catch пользовательские исключения

Контекст задачи

Каждая программа подвержена ошибкам: неверный ввод пользователя, отсутствие файла, сбой сетевого соединения. Без корректной обработки ошибок программа «падает», теряя данные и раздражая пользователей. Исключения — это механизм языка, позволяющий отделять логику обработки ошибок от основного сценария и делать программу надёжной.

Формулировка

Разработайте 3 варианта обработки ошибок в вашей программе: (1) перехват стандартного исключения, (2) обработка нескольких типов исключений с блоком finally, (3) создание и использование собственного исключения.

Ожидаемый результат

  • Класс с тремя методами, каждый из которых демонстрирует один из вариантов обработки ошибок
  • Корректное использование try, catch, finally
  • Пользовательское исключение, расширяющее Exception или RuntimeException
  • Информативные сообщения об ошибках

Инструментарий

Методы и подходы:

  • try-catch-finally — базовый механизм обработки исключений
  • Множественные catch для разных типов исключений
  • throw / throws — объявление и выброс исключений
  • Создание пользовательского класса-исключения (расширение Exception)
  • Финализация ресурсов через try-with-resources (если применимо)

Инструменты:

  • Язык: Java
  • IDE: IntelliJ IDEA / Eclipse

Навигатор

  • Обработка исключений в Java
  • Вопрос: Какие ошибки могут возникнуть в вашем проекте и как вы предупредите пользователя о каждой из них?
  • Примеры использования исключений
// 1. Попытка деления на ноль
try {
    int result = 10 / 0;
} catch (ArithmeticException e) {
    System.out.println("Деление на ноль невозможно!");
}

// 2. Обработка ошибок ввода-вывода
try {
    File file = new File("example.txt");
    FileInputStream fis = new FileInputStream(file);
    // действия с ресурсами
} catch (FileNotFoundException e) {
    System.out.println("Файл не найден: " + e.getMessage());
} catch (IOException e) {
    System.out.println("Ошибка ввода-вывода: " + e.getMessage());
} finally {
    try {
        if (fis != null) fis.close();
    } catch (IOException e) {
        System.out.println("Ошибка закрытия файла: " + e.getMessage());
    }
}

// 3. Собственное исключение
class CustomException extends Exception {
    public CustomException(String message) {
        super(message);
    }
}

📝 Критерии оценки

[ ] Реализован перехват стандартного исключения (ArithmeticException или аналог) [ ] Реализована обработка нескольких типов исключений с finally [ ] Создано пользовательское исключение, расширяющее Exception [ ] Сообщения об ошибках информативны и содержат описание проблемы [ ] Ресурсы корректно освобождаются (блок finally или try-with-resources) [ ] Исключения не подавляются — ошибки не игнорируются пустым catch