Назад к вопросам
Junior
92
questionbank

Как написать собственное (пользовательское) исключение в Java?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Для создания собственного исключения в Java необходимо выполнить следующие шаги:

  1. Создать новый класс: Наследовать его от одного из существующих классов исключений. Чаще всего наследуются от Exception или RuntimeException.
  2. Определить конструкторы: Обычно определяются конструкторы, принимающие сообщение об ошибке (String) и/или причину (Throwable).
  3. Добавить дополнительные поля или методы (опционально): Если необходимо хранить дополнительную информацию об исключении.

Пример создания простого пользовательского исключения:

// Пользовательское исключение для случая, когда число является отрицательным
public class NegativeNumberException extends Exception {

    // Конструктор без аргументов
    public NegativeNumberException() {
        super();
    }

    // Конструктор с сообщением об ошибке
    public NegativeNumberException(String message) {
        super(message);
    }

    // Конструктор с сообщением об ошибке и причиной
    public NegativeNumberException(String message, Throwable cause) {
        super(message, cause);
    }

    // Конструктор с причиной
    public NegativeNumberException(Throwable cause) {
        super(cause);
    }
}

Выбор между наследованием от Exception и RuntimeException зависит от того, является ли исключение "проверяемым" (checked) или "непроверяемым" (unchecked).

  • Наследование от Exception: Создает проверяемое исключение. Оно должно быть либо обработано (catch), либо объявлено в сигнатуре метода (throws). Используется для ситуаций, которые могут возникнуть при нормальной работе программы, но требуют явной обработки (например, файл не найден).
  • Наследование от RuntimeException: Создает непроверяемое исключение. Оно не требует обязательной обработки или объявления. Используется для ошибок, которые обычно указывают на проблемы в логике программы или среде выполнения (например, деление на ноль).

Использование пользовательского исключения:

public class ExampleUsage {

    // Метод, который может выбросить пользовательское исключение
    public void processNumber(int number) throws NegativeNumberException {
        if (number < 0) {
            // Выбрасываем экземпляр пользовательского исключения
            throw new NegativeNumberException("Число не может быть отрицательным: " + number);
        }
        // Логика обработки числа
        System.out.println("Число обработано: " + number);
    }

    public static void main(String[] args) {
        ExampleUsage example = new ExampleUsage();
        try {
            // Вызов метода, который может выбросить исключение
            example.processNumber(10);
            example.processNumber(-5); // Здесь выбросится исключение
        } catch (NegativeNumberException e) {
            // Обработка пользовательского исключения
            System.err.println("Ошибка: " + e.getMessage());
            //e.printStackTrace(); // Можно вывести стектрейс для отладки
        }
    }
}