#java #break #illegalargumentexception #continue
Вопрос:
Я хочу спросить, можно ли остановить исключение IllegalArgumentException от нарушения работы программы. Если я это сделаю:
throw new
IllegalArgumentException("Value not
allowed!");
continue;
Остановит ли это IAE от взлома программы после срабатывания исключения? Если нет, есть ли какой-либо способ просто отправить это сообщение об ошибке пользователю, а затем разрешить ему продолжить запуск программы без необходимости повторного запуска?
Комментарии:
1. Просто распечатайте сообщение, а затем:
System.err.println("Value not allowed!");
2. Смысл создания исключения состоит в том, чтобы завершить работу программы, если возникшая ошибка не будет обработана. Если вы не хотите, чтобы программа вышла из строя в результате ошибки, вам, скорее всего, не следует создавать исключение, или вы должны перехватывать его где-то еще в цепочке вызовов.
3. Читайте о блоке try-catch.
4.
throw
означает «остановитесь и переместитесь обратно в стек вызовов сейчас».
Ответ №1:
- Если вы хотите обработать исключение (т. Е. Остановить завершение программы), вы должны использовать блок try/catch.
- Всякий раз, когда возникает исключение, управление немедленно завершается. Ваше заявление «продолжить» НЕ выполняется.
- Когда вы «поймаете» исключение, вы можете повторно его выбросить. Предположительно, у вас будет еще один блок try/catch на каком-то более высоком уровне в коде.
- Однако ваша ЛУЧШАЯ стратегия состоит в том, чтобы «кодировать оборонительно» и попытаться предотвратить возникновение исключения IllegalArgumentException в первую очередь.
- Наконец, вы НИКОГДА не захотите ПОТЕРЯТЬ информацию.
/* * Poor: * *WHAT* value??? Where did this occur? Why? * You've just lost all this information, "Value not allowed" is uselessly vague... */ throw new IllegalArgumentException("Value not allowed!");
Комментарии:
1. Спасибо за предложения, вместо этого я буду использовать try/catch. Что касается «ценности», это идея из полной программы, которая у меня есть, с другими классами, из которых получено значение, я просто не хотел усложнять простой вопрос/идею, которую я получил больше из любопытства. Значение имеет смысл в контексте программы.
Ответ №2:
Либо используйте try..catch
структуру для «перехвата» исключения, либо просто не создавайте исключение в первую очередь.