Top.Mail.Ru
Ответы
Аватар пользователя
9лет
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+2

Зачем нужен и как применяется Throw в java

Господа Javaшники. Читаю я значит Шилдта про исключения - все ясно, но тникак не втуплю про Throw( именно Throw, a ne Throws). Написано что служит для генерации своих исключений. Но я не могу понять вот что: Нафига нам это нужно? Не посылайте в гугл - там именно про Throw полторы статьи, и те перефразированный Шилдт. Объясните пож по понятнее кто может.

Дополнен

P.S. - Соврал, не в гугле, а в православном Яндексе

Дополнен

P.S.S - Я правильно понял, что эта хрень юзается в таком случае: Мы написали код, и в каком то его участке возникла ошибка. Чтобы все не переписывать, мы генерируем исключение и посылаем его в обработчик?

Дополнен

P.S.S.S. - нет, кажись не для этого

По дате
По рейтингу

Есть такая штука в программах, что не всегда всё идёт гладко. Например: от пользователя ждут никнейм от 6 до 30 символов длиной, а вводит он 31 символ. Однако, метод, который проверяет соответствие никнейма критериям, не знает, что делать в случае ошибки. Эту ошибку надо на экран вывести в консоли, или на форму, или в файл логов записать? Непонятно. У него ограниченная "область ответственности". И тогда этот метод берёт и генерирует исключение с помощью ключевого слова throws. Делает он это для того, чтобы вызвавший его метод смог обработать эту ошибку. Ведь тот, кто выше, может больше знать о том, что с этой ошибкой вообще делать. Поэтому метод, где может возникнуть исключение, ко всему прочему помечается в шапке с throws. Затем это исключение будет обработано с помощью try-catch где-то выше, извне, где будет вызываться этот метод.
Можно было бы поступить иначе: из метода, проверяющего соответствие критериям, возвращать код результата int-ом. Например, 0 - успешно, 1 - слишком короткий ник, 2 - слишком длинный, 3 - содержит запрещённые символы и тд. Но это очень неудобно и некрасиво. Более того, это гораздо сложнее читается в коде. Поэтому делайте выбор в сторону исключений.
Подробнее об исключениях можно прочесть в статье про них на сайте о Java: https://beauty-of-java.site/java-fundament/isklyucheniya/

Аватар пользователя
9лет

самый простой вариант... не используй это если оно тебе малопонятно...

Аватар пользователя
Просветленный
9лет

Допустим, мы делаем компонент, отвечающий за проигрывание медиафайлов. Сиречь плеер. Вот некоторые юзкейсы.

1. У объекта плеера есть жизненный цикл: инициализация, воспроизведение, остановка, освобождение ресурсов. Если некто вызвал play() без предварительного init(), разумно выкинуть стандартное исключение IllegalStateException и пусть вызывающий метод сам разруливает ситуацию.

2. Пусть метод воспроизведения имеет сигнатуру play(String filepath), где filepath - путь до файла. Если кто-то передал туда лажу, например play("Hello world"), разумно уведомить его об этом исключением IllegalArgumentException.

3. При воспроизведении могут возникнуть какие-то специфичные для данного плеера ошибки. Может понадобиться завести свой класс PlaybackException и кидать его инстансы в случае таких ситуаций.

Аватар пользователя
Мастер
9лет

например создали метод:

public static void setName(String name) {
if (name == null) {
throw new NullPointerException("name = null");
else {
this.name = name;
}
}
}

--
throw - такое, редко используется в проектах, ибо Java/Oracle/Sun за нас позаботились об исключениях
основное предназначение - библиотеки