В Java и Kotlin ключевые слова throw
и throws
связаны с обработкой исключений, но выполняют разные функции. Рассмотрим их подробно.
Назначение:
Ключевое слово throw
используется для явного выбрасывания исключения в коде. Оно прерывает нормальное выполнение программы и передает управление ближайшему подходящему блоку catch
.
Пример в Java:
public void checkAge(int age) {
if (age < 18) {
throw new IllegalArgumentException("Возраст меньше 18"); // Явное выбрасывание исключения
}
}
Пример в Kotlin:
fun checkAge(age: Int) {
if (age < 18) {
throw IllegalArgumentException("Возраст меньше 18") // Аналогично в Kotlin
}
}
Особенности:
Назначение:
Ключевое слово throws
используется в сигнатуре метода, чтобы указать, что метод может выбросить определенные типы исключений. Это предупреждает вызывающий код о необходимости обработки или пробрасывания этих исключений.
Пример в Java:
public void readFile(String path) throws IOException, FileNotFoundException {
if (!new File(path).exists()) {
throw new FileNotFoundException("Файл не найден");
}
// Чтение файла...
}
Особенности:
@Throws
для совместимости с Java-кодом.throws
, он должен либо обработать исключение, либо объявить его в своей сигнатуре.Пример @Throws
в Kotlin:
@Throws(IOException::class)
fun readFile(path: String) {
if (!File(path).exists()) {
throw IOException("Файл не найден")
}
}
Характеристика | throw | throws |
---|---|---|
Тип операции | Выполнение (генерация исключения) | Объявление (указание возможных исключений) |
Где используется | В теле метода/блока кода | В сигнатуре метода (Java) |
Обязательность | Опционально (по необходимости) | Обязательно, если метод не обрабатывает проверяемые исключения (Java) |
Поддержка в Kotlin | Да (аналогично Java) | Нет (используется @Throws для совместимости) |
throw
:
Используется для валидации входных данных, обработки ошибок бизнес-логики или принудительного прерывания выполнения.
Пример:
if (user == null) {
throw new UserNotFoundException("Пользователь не найден");
}
throws
:
Применяется в методах, которые работают с внешними ресурсами (файлы, сеть), чтобы предупредить об ошибках времени выполнения.
Пример:
public void connectToDatabase(String url) throws SQLException {
// Код подключения к БД
}
throw
— генерирует исключение в коде.throws
— декларирует возможные исключения метода (актуально для Java).throws
используется аннотация @Throws
для взаимодействия с Java-кодом.