Для чего используется ключевое слово `throws` в объявлении метода Java?

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

Ответ

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

Основные цели:

  1. Контракт с вызывающим кодом: Компилятор обязывает вызывающую сторону либо обработать объявленное исключение в try-catch, либо также объявить его в своем throws. Это обеспечивает безопасность и явное управление ошибками.
  2. Декларация ответственности: Метод явно указывает, какие проблемные ситуации (кроме runtime-ошибок) он может спровоцировать.

Пример:

// Метод объявляет, что может выбросить IOException
public String readFile(String path) throws IOException {
    // Код, который может вызвать FileNotFoundException (наследник IOException)
    BufferedReader reader = new BufferedReader(new FileReader(path));
    return reader.readLine();
}

// Вызывающий код ДОЛЖЕН либо обработать исключение...
public void processFile() {
    try {
        String data = readFile("file.txt");
    } catch (IOException e) {
        System.err.println("Не удалось прочитать файл: " + e.getMessage());
    }
}

// ...либо объявить его дальше
public void processFile() throws IOException {
    String data = readFile("file.txt");
}

Важно: throws используется только для checked exceptions (наследников Exception, но не RuntimeException). Непроверяемые исключения (RuntimeException и его наследники) объявлять в throws необязательно.