В чем разница между ключевыми словами throw и throws в Java?

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

Ответ

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

Ключевые отличия:

  1. Место использования: throw используется внутри метода, throws — в его объявлении.
  2. Назначение: throw создает и инициирует исключение, throws лишь предупреждает вызывающий код о возможных исключениях.
  3. Синтаксис: throw — оператор, за которым следует объект исключения. throws — ключевое слово, за которым следует список классов исключений.

Пример:

// Метод объявляет, что может выбросить IOException (throws)
public void readFile(String path) throws IOException {
    File file = new File(path);
    // Оператор throw создает и выбрасывает исключение
    if (!file.exists()) {
        throw new IOException("Файл не найден: " + path);
    }
    // ... чтение файла
}

Практическое правило: Используйте throw для генерации исключений, а throws для передачи ответственности за обработку проверяемых исключений вверх по стеку вызовов.