Можно ли проигнорировать объявление ‘throws’ в сигнатуре вызываемого метода Java?

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

Ответ

Нет, нельзя просто проигнорировать. Код, вызывающий метод, объявленный с throws для checked-исключений, обязан отреагировать одним из двух способов. Игнорирование приведет к ошибке компиляции.

Checked исключения (например, IOException, SQLException):

  1. Обработать (catch) исключение на месте:

    void caller() {
        try {
            methodThatThrows(); // Объявлен как throws IOException
        } catch (IOException e) {
            // Обработка исключения
            System.err.println("Ошибка ввода-вывода: " + e.getMessage());
        }
    }
  2. Объявить в своей сигнатуре (пробросить дальше):

    void caller() throws IOException { // Добавляем throws
        methodThatThrows(); // Теперь компилятор доволен
    }

Unchecked исключения (RuntimeException и его наследники, например, NullPointerException, IllegalArgumentException):

  • Для них объявление throws в сигнатуре необязательно.
  • Их можно игнорировать (не обрабатывать и не объявлять), но это плохая практика, так как приведет к аварийному завершению программы при возникновении.

Правило компилятора: Вы обязаны либо обработать (catch), либо объявить (throws) все checked-исключения, которые могут быть выброшены вызываемым методом.