Можно ли не использовать try-catch, если метод объявлен с throws?

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

Ответ

Нет, ключевое слово throws не отменяет необходимость обработки проверяемых исключений (checked exceptions). Оно лишь объявляет, что метод может выбросить такое исключение. Вызывающий код обязан либо обработать его с помощью try-catch, либо объявить в своем собственном throws.

Два законных способа:

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

void callerMethod() {
    try {
        methodThatThrows(); // Метод с throws IOException
    } catch (IOException e) {
        // Логика обработки ошибки
        System.err.println("Ошибка ввода-вывода: " + e.getMessage());
    }
}

2. Проброс исключения дальше (объявление throws):

void callerMethod() throws IOException { // Пробрасываем ответственность выше
    methodThatThrows();
}

Важное уточнение:

  • Проверяемые исключения (Checked Exceptions): Классы, наследующие Exception (но не RuntimeException). Требуют обязательной обработки одним из двух способов выше. Пример: IOException, SQLException.
  • Непроверяемые исключения (Unchecked Exceptions): Классы, наследующие RuntimeException. Обработка для них не обязательна. Пример: NullPointerException, IllegalArgumentException.