На этот вопрос уже есть ответ:
Что делает assert
? Например, в функции:
private static int charAt(String s, int d) {
assert d >= 0 && d <= s.length();
if (d == s.length()) return -1;
return s.charAt(d);
}
Если вы запустите свою программу с -enableassertions
(или ] -ea
для краткости), то этот оператор
assert cond;
эквивалентен
if (!cond)
throw new AssertionError();
. Если вы запустите свою программу без этой опции, оператор assert не будет иметь никакого эффекта.
Например, assert d> = 0 && d <= s.length ();
, как указано в вашем вопросе, эквивалентно
if (!(d >= 0 && d <= s.length()))
throw new AssertionError();
(если вы запустили с -enableassertions
то есть.)
Формально, Спецификация языка Java: 14.10. assert
Утверждение говорит следующее:
14.10. Утверждение
assert
Утверждение - это утверждениеassert
, содержащее логическое выражение. Утверждение либо включено, либо отключено . Если утверждение разрешено, выполнение утверждения вызывает оценку логического выражения, и выдается сообщение об ошибке , если выражение оценивается какложь
. Если утверждение отключено, выполнение утверждения не имеет никакого эффекта.
Где «включен или отключен» управляется переключателем -ea
, а «Сообщается об ошибке» означает, что AssertionError
] брошен.
assert
: Вы можете добавить : «Сообщение об ошибке»
следующим образом:
assert d != null : "d is null";
, чтобы указать, какое сообщение об ошибке выброшенное AssertionError должно быть.
Этот пост был переписан в статью здесь .
Если условие не выполнено, будет выброшена AssertionError
.
Утверждения должны быть включены; в противном случае выражение assert
ничего не делает. См.:
http://java.sun.com/j2se/1.5.0/docs/guide/language/assert.html#enable-disable
assert
- это инструмент отладки, который приведет к тому, что программа выдаст исключение AssertionFailed
, если условие не истинно. В этом случае программа выдаст исключение, если одно из двух следующих за ней условий оценивается как ложное. Вообще говоря, assert
не следует использовать в производственном коде
Используйте эту версию оператора assert для предоставления подробного сообщения об ошибке AssertionError. Система передает значение Expression2 соответствующему конструктору AssertionError, который использует строковое представление значения в качестве подробного сообщения об ошибке.
Цель подробного сообщения состоит в том, чтобы зафиксировать и сообщить подробности сбоя утверждения. Сообщение должно позволить вам диагностировать и в конечном итоге исправить ошибку, которая привела к сбою утверждения. Обратите внимание, что подробное сообщение не является сообщением об ошибке на уровне пользователя, поэтому, как правило, нет необходимости делать эти сообщения понятными по отдельности или переводить их на международный уровень. Подробное сообщение предназначено для интерпретации в контексте полной трассировки стека вместе с исходным кодом, содержащим неудачное утверждение.
Он гарантирует, что выражение вернет истину. В противном случае генерируется ошибка java.lang.AssertionError
.
http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.10
Assert выдает AssertionError, если вы запускаете приложение с включенными утверждениями.
int a = 42;
assert a >= 0 && d <= 10;
Если вы запустите это, скажем: java -ea -jar peiska.jar
Выбросит java.lang.AssertionError
Утверждения обычно используются в основном как средство проверки ожидаемого поведения программы. В большинстве случаев это должно приводить к сбою, поскольку предположения программиста о состоянии программы ложны. Вот тут-то и появляется отладочный аспект утверждений. Они создают контрольную точку, которую мы просто не можем игнорировать, если хотим иметь правильное поведение.
В вашем случае он выполняет проверку данных по входящим параметрам, хотя это не мешает клиентам злоупотреблять функцией в будущем. Особенно, если их нет (и не следует) включать в сборку выпуска.