Что означает сигнатура `throws RuntimeException` в объявлении метода Java?

«Что означает сигнатура `throws RuntimeException` в объявлении метода Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Поэтому сигнатура throws RuntimeException:

  1. Не обязательна с точки зрения компилятора. Непроверяемые исключения можно бросать без их объявления в throws.
  2. Имеет документационное значение. Явное объявление throws RuntimeException служит подсказкой для разработчика, что метод может завершиться с определенной runtime-ошибкой, даже though обработка не принудительна.
  3. Может использоваться для точного указания типа в сложных иерархиях или при переопределении методов.

Пример:

// Оба варианта корректны с точки зрения компиляции
public void method1() {
    throw new RuntimeException("Ошибка!");
}

// Явное объявление для документации
public void method2() throws RuntimeException {
    if (someCondition) {
        throw new IllegalArgumentException("Некорректный аргумент");
    }
}

Практика: Чаще throws RuntimeException опускают, чтобы не загромождать сигнатуру, но иногда его добавляют для ясности в API или при переопределении методов, которые уже объявлены с таким throws.