В 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-кодом.