Назад к вопросам
Junior
92
questionbank
Как написать собственное (пользовательское) исключение в Java?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Для создания собственного исключения в Java необходимо выполнить следующие шаги:
- Создать новый класс: Наследовать его от одного из существующих классов исключений. Чаще всего наследуются от
ExceptionилиRuntimeException. - Определить конструкторы: Обычно определяются конструкторы, принимающие сообщение об ошибке (
String) и/или причину (Throwable). - Добавить дополнительные поля или методы (опционально): Если необходимо хранить дополнительную информацию об исключении.
Пример создания простого пользовательского исключения:
// Пользовательское исключение для случая, когда число является отрицательным
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(); // Можно вывести стектрейс для отладки
}
}
}