


Зачем нужен и как применяется 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/
самый простой вариант... не используй это если оно тебе малопонятно...
Допустим, мы делаем компонент, отвечающий за проигрывание медиафайлов. Сиречь плеер. Вот некоторые юзкейсы.
1. У объекта плеера есть жизненный цикл: инициализация, воспроизведение, остановка, освобождение ресурсов. Если некто вызвал play() без предварительного init(), разумно выкинуть стандартное исключение IllegalStateException и пусть вызывающий метод сам разруливает ситуацию.
2. Пусть метод воспроизведения имеет сигнатуру play(String filepath), где filepath - путь до файла. Если кто-то передал туда лажу, например play("Hello world"), разумно уведомить его об этом исключением IllegalArgumentException.
3. При воспроизведении могут возникнуть какие-то специфичные для данного плеера ошибки. Может понадобиться завести свой класс PlaybackException и кидать его инстансы в случае таких ситуаций.
например создали метод:
public static void setName(String name) {
if (name == null) {
throw new NullPointerException("name = null");
else {
this.name = name;
}
}
}
--
throw - такое, редко используется в проектах, ибо Java/Oracle/Sun за нас позаботились об исключениях
основное предназначение - библиотеки