Учебные пособия и лучшие практики по использованию утверждений Java
Учебные пособия и лучшие практики по использованию утверждений Java

как Java Разработчик, если я хочу спросить вас Java Каковы ключевые слова в , вы можете случайно назвать строку, если вас спросят. Java Какие ключевые слова используются реже всего? Может быть, вы сможете назвать несколько? но assert Ключевое слово должно быть одним из них или Java. Я пишу его уже несколько лет и еще не использовал. Java из assert Ключевые слова.

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

Введение в подтверждение Java

Assert По-китайски мы обычно называем это утверждением, вы можете понимать это как «С абсолютной уверенностью» . утверждение встречается во многих языках программирования,Использованиеутверждение позволяет быстро и легко проверить, установлено ли определенное предположение или состояние в программе.,Если это не так, немедленно будет выброшено исключение.。Утверждения обычно используются на этапах разработки и тестирования.

Java серединаизучениеиспользовать assert реализация ключевого слова, но потому что assert существовать Java 1.4 был представлен в Китае, поэтому существуют Java 1.4 До,assert Не совсем Java Ключевые слова могут быть записаны как обычные имена переменных. новая версия Java При строгой обратной совместимости это также может быть Java Одна из причин, почему утверждение по умолчанию отключено, включение утверждения может использоваться. -ea Параметры включаются вручную.

Язык кода:javascript
копировать
java -ea YourClassName

Включить и отключить утверждения

По вышеуказанным причинам Java Утверждения отключены по умолчанию. Вы можете включить утверждения вручную. -ea как JVM Начало параметра Java программа.

-ea да -enableassertions Аббревиатура команды из.

Язык кода:javascript
копировать
java -ea AssertDemo

Также можно использовать -ea: путь к пакету Включайте утверждения только для определенных пакетов, например пакетов com.wdbyte Включить поддержку утверждений для всех классов в из.

Язык кода:javascript
копировать
-ea:com.wdbyte...

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

Язык кода:javascript
копировать
-da:com.wdbyte...

-da да -disableassertions из аббревиатуры

Использование утверждений в Java

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

Путь 1

Язык кода:javascript
копировать
assert boolExpression;

использовать assert За ключевым словом следует логическое условие для оценки утверждения. Если утверждение не выполняется таким образом, оно выдает исключение. java.lang.AssertionError Исключение, но конкретного сообщения об ошибке нет.

Пример:

Язык кода:javascript
копировать
List<String> list = Arrays.asList("wdbyte", "com");
boolean result = list.remove("x");
assert result;

бегать:

Язык кода:javascript
копировать
Exception in thread "main" java.lang.AssertionError
    at com.wdbyte.assert1.AssertDemo1.main(AssertDemo1.java:14)

Способ 2

Язык кода:javascript
копировать
assert boolExpression:msg;

Когда сообщение об ошибке сообщается таким образом, msg Назначено через конструктор AssertionError

Пример:

Язык кода:javascript
копировать
assert result : "Удаление не удалось";

бегать:

Язык кода:javascript
копировать
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, что можно рассматривать как неявное ограничение да.

Язык кода:javascript
копировать
if (i % 3 == 0) {
    ...
} else if (i % 3 == 1) {
    ...
} else { // Вот мы думаем (i % 3 == 2)
    ...
}

существуют В этом примере,Если вы хотите объявить неявное правило посредством аннотации,Может Вместо этого следует использоватьутверждение。Поэтому вышеизложенноеиз if Это утверждение можно переписать следующим образом:

Язык кода:javascript
копировать
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");; существоватьутверждение Запрещатьчас,не будет выполнено,Это приведет к ненормальным результатам работы программы.

Язык кода:javascript
копировать
// assert list.remove("x") : "Удаление не удалось"; Нежелательно, может быть не реализовано
// Рекомендую следующие методы
boolean result = list.remove("x");
assert result : "Удаление не удалось";

Подтверждать расширенное использование

Устранить утверждения во время компиляции

существуют Разработка приложений на устройствах с ограниченной производительностью,Возможно, мы захотим полностью исключить утверждение из файла класса. Хотя утверждение можно отключить,Но да не требуется для существования кода в производственной среде.,Мы также хотим удалить как можно больше,Это не только уменьшает размер файла класса,И он может существовать без высококачественного JIT-компилятора.,Сократите использование ресурсов и улучшите производительность во время выполнения.

Если у вас схожие потребности, вы можете объединить их, если Условие существует во время компиляции.

Язык кода:javascript
копировать
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 Можно обнаружить, что часть кодекса утверждений больше не существует.

Язык кода:javascript
копировать
List<String> list = Arrays.asList("wdbyte", "com");
boolean result = list.remove("x");

Принудительно включить утверждения

нравиться Если некоторые критические системы захотятсуществовать Укажите средусерединаУтверждения не могут быть отключены。подиз Пример статической инициализации Может Для достижения этого обязательного условия。

Язык кода:javascript
копировать
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добрый。

Язык кода:javascript
копировать
List<String> list = Arrays.asList("wdbyte", "com");
boolean result = list.remove("x");
Assertions.assertTrue(result);

2. AssertJ: AssertJ Богатое использование датчиков, потоковая передача и простое использование подтверждения облегчают диагностику ошибок. Он поддерживает Java 8Из функций, таких как лямбда-выражения, потоковые и дополнительные типы просмотра.

Язык кода:javascript
копировать
Assertions.assertThat("").isEmpty()

3. Apache Commons Lang : Предоставить из Validate Классы могут выполнять общие условные проверки.

Язык кода:javascript
копировать
Validate.isTrue(list.isEmpty(),"msg");

4. Google Guava :Guava предоставил Preconditions Класс можно использовать для общей условной проверки, а также для просмотра Verify Класс используется для операций утверждения.

Язык кода:javascript
копировать
Preconditions.checkNotNull("","msg");
Verify.verify(list.isEmpty(),"msg");

ссылка

  1. 1. https://docs.oracle.com/javase/8/docs/technotes/guides/language/assert.html
  2. 2. https://junit.org/
  3. 3. https://github.com/assertj/assert

Эта статья также включена в: github.com/niumoo/JavaNotes. Также имеется на веб-сайте: https://www.wdbyte.com.

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода