Можно ли в Java объявлять unchecked-исключения в предложении throws?

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

Ответ

Да, можно, но это не имеет практического смысла.

  • Unchecked-исключения (наследники RuntimeException и Error) не обязательны для объявления в throws.
  • Компилятор не проверяет, обрабатывает ли вызывающий код такие исключения.

Пример (синтаксически корректно, но избыточно):

public void processData() throws NullPointerException, IllegalArgumentException {
    // Метод может выбросить эти RuntimeException
    throw new IllegalArgumentException("Invalid argument");
}

Почему этого следует избегать:

  1. Загромождает сигнатуру метода без добавления полезной информации для компилятора или разработчика.
  2. Не соответствует конвенции: throws предназначен для объявления checked-исключений, которые являются частью контракта метода и требуют обязательной обработки.
  3. Может вводить в заблуждение, создавая впечатление, что исключение требует специальной обработки, хотя это не так.