2015-05-19 2 views
2

По умолчанию утверждение не включена, поэтому мы должны включить его, проходя -ea как jvm argument так,Почему утверждение не включено по умолчанию в java?

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

1. [Почему утверждение не включена по умолчанию] [1] 2 и 3. [Использование утверждения и делать они поднимают ошибку] ​​[2] [1]: HTTP: //stackoverflow.com/questions/29120928/why-is-assert-not-enabled-by-default-in-java [2]: http://stackoverflow.com/questions/13218496/what-is-the -use-of-assert-in-java –

+2

1-2) Утверждения предназначены только для использования в качестве инструмента тестирования, они не должны быть частью стандартной логики кода, поэтому JVM на стороне клиента не должен запускать ее, поэтому он по умолчанию отключен. 3) зависит от кода утверждений, который обычно пропускается. – Pshemo

+5

@GauravMahawar Используйте '[description] (link)' для размещения ссылок в комментариях. – Pshemo

ответ

3

Для 1,2) Каждое утверждение содержит булево выражение, которое, по вашему мнению, будет истинным, когда выполняется утверждение. Если это неверно, система выдаст ошибку. Проверяя, что логическое выражение действительно верно, утверждение подтверждает ваши предположения о поведении вашей программы, повышая вашу уверенность в том, что в программе нет ошибок.

Для 3) Как вы говорите компилятору, что утверждённый код возвращает некоторую вещь, которую вы ожидали уже от результата. Если код не возвращает тот же результат, что и вы ожидали, есть вероятность возникновения фатальных ошибок или неожиданной памяти утечки, кроме ошибок утверждения.

Надеюсь, это поможет!

Документация http://docs.oracle.com/javase/7/docs/technotes/guides/language/assert.html

1

Утверждение может быть использовано для проверки (и документы) программа инвариантно.

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

Это спорно, следует ли включать утверждения в производственной среде, поэтому Java может решить, произвольно, что он не будет делать это по умолчанию, или может сделать так, чтобы не путать неосведомленных.

Я не ожидаю, что утверждения могут повредить производительность вообще в производственной среде (если вы их не активируете), они могут быть легко оптимизированы компилятором JIT (или полностью проигнорированы).

+0

3) поскольку утверждения не включены по умолчанию, важно, чтобы выражение (функция или простое выражение) не имело побочных эффектов. Например, выражение не должно изменять значение переменной, так как поведение программы будет меняться при включении утверждений. Одним из важных вариантов использования является проверка условий до/после работы в среде разработки или QA (с использованием -ea) и возможность удаления этих тестов из производства без необходимости изменения кода. Некоторые утверждают, что вы можете достичь аналогичных аспектов, но мне легче использовать assert. – roostergx

Смежные вопросы