как Java Разработчик, если я хочу спросить вас Java Каковы ключевые слова в , вы можете случайно назвать строку, если вас спросят. Java Какие ключевые слова используются реже всего? Может быть, вы сможете назвать несколько? но assert
Ключевое слово должно быть одним из них или Java. Я пишу его уже несколько лет и еще не использовал. Java из assert
Ключевые слова.
В этой статье описываются методы использования Java, лучшие практики, специальные способы использования и альтернативные инструменты.
Assert
По-китайски мы обычно называем это утверждением, вы можете понимать это как «С абсолютной уверенностью» . утверждение встречается во многих языках программирования,Использованиеутверждение позволяет быстро и легко проверить, установлено ли определенное предположение или состояние в программе.,Если это не так, немедленно будет выброшено исключение.。Утверждения обычно используются на этапах разработки и тестирования.
Java серединаизучениеиспользовать assert
реализация ключевого слова, но потому что assert
существовать Java 1.4 был представлен в Китае, поэтому существуют Java 1.4 До,assert
Не совсем Java Ключевые слова могут быть записаны как обычные имена переменных. новая версия Java При строгой обратной совместимости это также может быть Java Одна из причин, почему утверждение по умолчанию отключено, включение утверждения может использоваться. -ea
Параметры включаются вручную.
java -ea YourClassName
По вышеуказанным причинам Java Утверждения отключены по умолчанию. Вы можете включить утверждения вручную. -ea
как JVM Начало параметра Java программа.
-ea
да-enableassertions
Аббревиатура команды из.
java -ea AssertDemo
Также можно использовать -ea: путь к пакету
Включайте утверждения только для определенных пакетов, например пакетов com.wdbyte
Включить поддержку утверждений для всех классов в из.
-ea:com.wdbyte...
Если некоторые библиотеки классов слишком старые, используйте assert
как имя переменной, для нормальной работы, Java Также документы отключает параметр утверждения для некоторых пакетов.
-da:com.wdbyte...
-da
да-disableassertions
из аббревиатуры
Использование утверждений в Java имеет два синтаксиса.
assert boolExpression;
использовать assert
За ключевым словом следует логическое условие для оценки утверждения. Если утверждение не выполняется таким образом, оно выдает исключение. java.lang.AssertionError
Исключение, но конкретного сообщения об ошибке нет.
Пример:
List<String> list = Arrays.asList("wdbyte", "com");
boolean result = list.remove("x");
assert result;
бегать:
Exception in thread "main" java.lang.AssertionError
at com.wdbyte.assert1.AssertDemo1.main(AssertDemo1.java:14)
assert boolExpression:msg;
Когда сообщение об ошибке сообщается таким образом, msg
Назначено через конструктор AssertionError
。
Пример:
assert result : "Удаление не удалось";
бегать:
Exception in thread "main" java.lang.AssertionError: Удаление не удалось
at com.wdbyte.assert1.AssertDemo1.main(AssertDemo1.java:15)
Помнить assert
утверждениесредство отладки,Используется на этапах разработки и тестирования для проверки верности определенных предположений.,Это вспомогательный инструмент для разработчиков.,Это не должно оказывать никакого влияния на работу онлайн-кода.
использоватьутверждениечасизлучшие практикидаубедитесь в этомОн не станет частью обычного процесса выполнения программы.,А дакак — это средство обнаружения внутренних ошибок и проверки гипотез программы. существуют чувствительные к производительности или ресурсы ограничены окружающей средой,Открытие должно существовать на этапе разработки и тестированияиспользованиеутверждения.,Затем отключите их перед развертыванием рабочей версии.
1. Этап разработки и тестирования в рамках специальной проверкивозвращатьсядаповтори этоиспользоватьчасмашина,первыйпотому что assert
заявлениесуществовать По умолчанию в производственной средеда Запрещатьиз,Во-вторых, это может повлиять на производительность.,Не следует использовать в качестве механизма обработки ошибок. существуют Разработкаили Во время отладки,Когда вы хотите проверить гипотезу,assert
Можеткакбыстрая проверкаизметод。Эти обычаи обычносуществовать Код удаляется после достижения стабильного состоянияили Заменен на более прочный.из Механизм обработки ошибок。
2. Модульное тестирование используетутверждение оценивает результат выполнения метода из,да Самая часто используемая операция при модульном тестировании. Если утверждение не пройдет,Программа сразу выдаст ошибку. Хороший код должен быть написан с соответствующими модульными тестами.,И дайте как можно больше тест-кейсов,утверждение может гарантировать, что результаты эксплуатации программы находятся в пределах ожиданий.
3. Как понять неявные ограничения хранения существующих существ, как показано в следующем примере кода, в коде else
Частично по умолчанию i%3
Остаток из равен 2, что можно рассматривать как неявное ограничение да.
if (i % 3 == 0) {
...
} else if (i % 3 == 1) {
...
} else { // Вот мы думаем (i % 3 == 2)
...
}
существуют В этом примере,Если вы хотите объявить неявное правило посредством аннотации,Может Вместо этого следует использоватьутверждение。Поэтому вышеизложенноеиз if Это утверждение можно переписать следующим образом:
if (i % 3 == 0) {
...
} else if (i % 3 == 1) {
...
} else {
assert i % 3 == 2 : i;
...
}
Примечание: существуют в примере
i
утверждение не будет выполнено, если оно отрицательное число, а остаток данегативиз.
1. Не используйте его для проверки параметров. Во-первых, утверждение может быть отключено, оператор утверждения не будет выполняться. Во-вторых, проверка параметров должна вызывать соответствующее исключение, например NullPointerException
или IllegalArgumentException
или IndexOutOfBoundsException
.
2. Не выполняйте код в период существования. потому что чтоутверждениеможет быть Запрещать,Если код основан на выполнении утверждений, он может быть не выполнен.。нравиться assert list.remove("x");;
существоватьутверждение Запрещатьчас,не будет выполнено,Это приведет к ненормальным результатам работы программы.
// assert list.remove("x") : "Удаление не удалось"; Нежелательно, может быть не реализовано
// Рекомендую следующие методы
boolean result = list.remove("x");
assert result : "Удаление не удалось";
существуют Разработка приложений на устройствах с ограниченной производительностью,Возможно, мы захотим полностью исключить утверждение из файла класса. Хотя утверждение можно отключить,Но да не требуется для существования кода в производственной среде.,Мы также хотим удалить как можно больше,Это не только уменьшает размер файла класса,И он может существовать без высококачественного JIT-компилятора.,Сократите использование ресурсов и улучшите производительность во время выполнения.
Если у вас схожие потребности, вы можете объединить их, если Условие существует во время компиляции.
static final boolean asserts = false; // установлен на false исключить утверждение
общественный static void main(String[] args) {
List<String> list = Arrays.asList("wdbyte", "com");
boolean result = list.remove("x");
if (asserts) {
assert result : "Удаление не удалось";
}
}
потому что if (asserts)
навсегда для false, существование будет оптимизировано на этапе компиляции и будет декомпилировано и скомпилировано. class Можно обнаружить, что часть кодекса утверждений больше не существует.
List<String> list = Arrays.asList("wdbyte", "com");
boolean result = list.remove("x");
нравиться Если некоторые критические системы захотятсуществовать Укажите средусерединаУтверждения не могут быть отключены。подиз Пример статической инициализации Может Для достижения этого обязательного условия。
static {
boolean assertsEnabled = false;
assert assertsEnabled = true;
if (!assertsEnabled) {
throw new RuntimeException("Должно быть включено утверждение!!!");
}
}
существоватьJavaсередина,В дополнение к встроенному языкуизassert
Вне ключевых слов,Многие библиотеки с открытым исходным кодом имеют более мощные и гибкие механизмы.,Эти инструменты часто используются при модульном тестировании.,Но его также можно использовать в рабочем коде для проверки условий. Ниже перечислены некоторые широко используемые библиотеки с открытым исходным кодом, которые имеют функциональность утверждения.
1. JUnit: JUnit — это обширная среда модульного тестирования, содержащая методы для написания тестов. Юнит 4 использоватьorg.junit.Assert
класс обеспечиваетутверждение,иJUnit 5 затем представилorg.junit.jupiter.api.Assertions
добрый。
List<String> list = Arrays.asList("wdbyte", "com");
boolean result = list.remove("x");
Assertions.assertTrue(result);
2. AssertJ: AssertJ Богатое использование датчиков, потоковая передача и простое использование подтверждения облегчают диагностику ошибок. Он поддерживает Java 8Из функций, таких как лямбда-выражения, потоковые и дополнительные типы просмотра.
Assertions.assertThat("").isEmpty()
3. Apache Commons Lang : Предоставить из Validate
Классы могут выполнять общие условные проверки.
Validate.isTrue(list.isEmpty(),"msg");
4. Google Guava :Guava предоставил Preconditions
Класс можно использовать для общей условной проверки, а также для просмотра Verify Класс используется для операций утверждения.
Preconditions.checkNotNull("","msg");
Verify.verify(list.isEmpty(),"msg");
Эта статья также включена в: github.com/niumoo/JavaNotes. Также имеется на веб-сайте: https://www.wdbyte.com.