Исключение IllegalArgumentException продолжать избегать взлома программы?

#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:

  1. Если вы хотите обработать исключение (т. Е. Остановить завершение программы), вы должны использовать блок try/catch.
  2. Всякий раз, когда возникает исключение, управление немедленно завершается. Ваше заявление «продолжить» НЕ выполняется.
  3. Когда вы «поймаете» исключение, вы можете повторно его выбросить. Предположительно, у вас будет еще один блок try/catch на каком-то более высоком уровне в коде.
  4. Однако ваша ЛУЧШАЯ стратегия состоит в том, чтобы «кодировать оборонительно» и попытаться предотвратить возникновение исключения IllegalArgumentException в первую очередь.
  5. Наконец, вы НИКОГДА не захотите ПОТЕРЯТЬ информацию.
     /*
     * 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 структуру для «перехвата» исключения, либо просто не создавайте исключение в первую очередь.