Должен ли я поставить броски allectalargumentException на функцию?
-
24-10-2019 - |
Вопрос
Я строю научное программное обеспечение с большим количеством расчетов и, конечно, аргументы могут иметь неправильную длину и т. Д. Поэтому я использовал IllegalArgumentException
класс, как это казалось правильным названием для этой проблемы, но если я положил throws IllegalArgumentException
При определении функции?
Я спрашиваю об этом, потому что после того, как я написал это, редактор Eclipse не попросил меня окружить функцию Try and Catch. Я думал, что так применялись попытки. Я прочитал учебник по обработке исключений на java.com, но я не уверен, что понял роль в отношении моего вопроса правильно.
Решение
RuntimeException
s Like IllegalArgumentException
используются для указания ошибки программирования. Анкет Сама программа редко должна быть в состоянии справиться с ней. Кто -то должен вручную исправить код.
Потенциал RuntimeException
S должен быть задокументирован как -то в функциональном контракте (т.е. Javadoc), либо с явным @throws
, или при описании входов. Если у вас нет Javadoc для этой функции, вы можете добавить пункт о бросках, чтобы только документировать потенциальные ловушки использования функции, но в целом добавляя замены, чтобы исключить выполнение исключений.
Если предоставление неправильной длины на самом деле не является ошибкой программирования, но является ситуацией исключения, я бы создал новое проверенное исключение (например, BadlengthEerror). Если это не исключительная ситуация, не используйте исключения для управления потоком.
Другие советы
Есть два типа исключений:
Исключения времени выполнения (например, например, нелегаларгументирование и NullpointerException) не нужно явно пойманно, потому что они «не должны происходить». Когда они это делают, конечно, вам нужно где -то справиться с ними.
Регулярные исключения должны быть пойманы или объявлены брошенными, потому что они представляют собой более сложный вид ошибки.
Вам нужно прочитать неконтролируемые исключения - исключения, которые наследуют от Runtimeexception. Их не нужно объявлять в заголовке метода.
http://download.oracle.com/javase/tutorial/essential/exceptions/runtime.html
Последний абзац подводит итог:
Если клиент можно найти разумно восстановиться после исключения, сделайте его проверенным исключением. Если клиент не может ничего сделать, чтобы восстановиться от исключения, сделайте его неконтролируемым исключением.
IllegalArgumentException
(вместе с некоторыми другими, например NullPointerException
) примеры RuntimeException
. Анкет Этот тип исключения не то, что известно как проверено исключение. Анкет Java требует, чтобы методы заявляли о том, какие проверенные исключения они бросают и что если называемый метод может выбросить проверенное исключение, вызовный метод должен либо заявить, что он бросает само исключение, либо подхватить и обрабатывать его.
Таким образом, моя конкретная рекомендация была бы «нет», не заявляйте об этом. Конечно, вы не хотите его ловить. В большинстве случаев вы также не хотите его бросать пока не Это непредвиденный поведение. Если это нормально и разумно, чтобы метод получил значение, которое ему не нравится, исключение - это неправильный способ справиться с этим.
Вы также можете рассмотреть возможность использования утверждений.
Первый момент при понимании исключений заключается в том, что они предназначены для исключительных ситуаций. Размышляя о вашем методе, вы должны спросить: «Должен ли этот метод бросает исключение, если проходит исключительное значение?» Если ответ «да», поместите его в объявление метода. Я не знаю, поймете ли вы идею, но это довольно просто. Это просто вопрос практики.