Ответ
Ключевое слово throws в сигнатуре метода указывает, что метод может выбросить проверяемое (checked) исключение. Однако RuntimeException и его наследники являются непроверяемыми (unchecked) исключениями.
Поэтому сигнатура throws RuntimeException:
- Не обязательна с точки зрения компилятора. Непроверяемые исключения можно бросать без их объявления в
throws. - Имеет документационное значение. Явное объявление
throws RuntimeExceptionслужит подсказкой для разработчика, что метод может завершиться с определенной runtime-ошибкой, даже though обработка не принудительна. - Может использоваться для точного указания типа в сложных иерархиях или при переопределении методов.
Пример:
// Оба варианта корректны с точки зрения компиляции
public void method1() {
throw new RuntimeException("Ошибка!");
}
// Явное объявление для документации
public void method2() throws RuntimeException {
if (someCondition) {
throw new IllegalArgumentException("Некорректный аргумент");
}
}
Практика: Чаще throws RuntimeException опускают, чтобы не загромождать сигнатуру, но иногда его добавляют для ясности в API или при переопределении методов, которые уже объявлены с таким throws.