Должен ли я помещать в функцию IllegalArgumentException?

Я создаю научное программное обеспечение с большим количеством вычислений, и, конечно, аргументы могут иметь неправильную длину и т.д. Поэтому я использовал класс IllegalArgumentException, поскольку это казалось правильным именем для проблемы, но я должен положить throws IllegalArgumentException при определении функции?

Я спрашиваю об этом, потому что после того, как я его написал, редактор Eclipse не просил меня окружить функцию с помощью try и catch. Я думал, что это так, как старались и улавливались. Я прочитал учебник по обработке исключений на Java.com, но я не уверен, что понял часть, касающуюся моего вопроса, хотя.

Ответ 1

RuntimeException like IllegalArgumentException используются для обозначения ошибок программирования. Сама программа редко должна справляться с этим. Кому-то нужно вручную исправить код.

Потенциал RuntimeException должен быть каким-то образом зарегистрирован в контракте функции (т.е. javadoc), либо с явным @throws, либо при описании входов. Если у вас нет функции javadoc для этой функции, вам может понадобиться добавить предложение throws только для документирования потенциальных ошибок использования этой функции, но в общем случае добавление предложений бросков для исключений во время выполнения не рекомендуется.

Если неправильная длина не является ошибкой программирования, но является ситуацией с исключениями, я бы создал новое проверенное исключение (например, BadLengthError). Если это не исключительная ситуация, не используйте исключения для управления потоком.

Ответ 2

Существует два типа исключений:

Исключения среды выполнения (например, IllegalArgumentException и NullPointerException, например) не обязательно должны быть явно пойманы, потому что их "не должно произойти". Когда они это делают, конечно, вам нужно где-то их обрабатывать.

регулярные исключения НЕОБХОДИМО быть пойманными или объявленными, чтобы быть выброшенными, потому что они представляют собой более сугубо сложную ошибку.

Ответ 3

Вам нужно прочитать "Исключенные исключения" - исключения, которые наследуются от RuntimeException. Они не должны быть объявлены в заголовке метода.

http://download.oracle.com/javase/tutorial/essential/exceptions/runtime.html

Последний абзац подводит итог:

Если клиент можно разумно ожидать восстановить из исключения, сделать это проверенное исключение. Если клиент не может ничего сделать, чтобы оправиться от исключение, сделать его непроверенным исключение.

Ответ 4

IllegalArgumentException (наряду с некоторыми другими, например NullPointerException) являются примерами a RuntimeException. Этот тип исключения не является тем, что известно как проверенное исключение. Java требует, чтобы методы объявляли, какие проверенные исключения они бросают, и что, если вызываемый метод может выставить проверенное исключение, вызывающий метод должен либо объявить, что он сам выдаёт исключение, либо улавливает и обрабатывает его.

Таким образом, моя конкретная рекомендация не будет, не объявляйте об этом. Конечно, вы не хотите, чтобы это ловить. В большинстве случаев вы также не хотите бросать его, если это не неожиданное поведение. Если это нормально и разумно, чтобы метод получал значение, которое ему не нравится, исключение является неправильным способом его обработки.

Вы также можете рассмотреть возможность использования утверждений.

Ответ 5

первая точка при понимании исключений заключается в том, что они предназначены для исключительных ситуаций. Когда вы думаете о своем методе, вы должны спросить: "Должен ли этот метод вызывать исключение, если передается исключительное значение?" Если ответ "да", поместите его в объявление метода.  Я не знаю, понимаете ли вы эту идею, но это просто. Это просто вопрос практики.