Утверждение в Java — это утверждение, основанное на зарезервированном слове assert, имеющее логическое выражение и заканчивающееся точкой с запятой. Бывает, что определенные условия в программе могут препятствовать ее правильной работе. Оператор assert проверяет, существуют ли такие условия в программе.
Ожидается, что это утверждение будет использоваться в программе, где программист подозревает, что такое условие может существовать. Если используется оператор assert и условие не выполняется неправильно, то программа продолжит работу без каких-либо проблем. Если условие выполняется неправильно, выдается сообщение об ошибке. Такая проверка включает логическое выражение. Конечно, кодирование утверждения не обязательно должно включать зарезервированное слово утверждения. Есть много хороших программ, которые выполняют кодирование утверждений без зарезервированного слова. Однако использование зарезервированного слова assert выявляет одну особенность программирования, делая программу более конструктивной.
Рассмотрим следующий сегмент кода:
Integer in = null;
if (in != null) {
System.out.println(«Do this.»);
//other statements
} else
System.out.println(«Test failed.»);
В настоящее время значение «in» равно null, но может быть любым целым числом. if-bock будет выполнен, если он не нулевой, что следует считать хорошим. Если оно равно null (false), будет выполнена другая часть оператора if-compound, сообщая о проблеме.
Теперь один оператор assert может заменить большую часть составного оператора if. Это одно из классических применений оператора assert. Другое классическое использование — проверить, не был ли достигнут предел результата вычисления, как показано в следующем описании:
Скорость движущегося объекта определяется выражением,
s = d/t
где d — расстояние, t — затраченное время, а s — результат (скорость). Может быть желательно, чтобы скорость объекта оставалась ниже скорости звука и, таким образом, не вызывала ударных волн. В этом случае оператор assert может использоваться для утверждения, что скорость ниже скорости звука, которая составляет 343 м/с.
Программный код для этой задачи без оператора утверждения может быть следующим:
double d = 15, t = 3, s;
s = d / t;
if (s < 343) {
System.out.println(«Do this.»);
//other statements
} else
System.out.println(«Test failed.»);
Assertion Syntaxes в Java
В Java синтаксис утверждений существует в двух формах. Они есть:
assert Expression1 ;
and
assert Expression1 : Expression2 ;
Для первого варианта (оператора) Expression1 является логическим выражением. Примечание. Равно в логическом выражении ==, потому что в вычислениях = означает присваивание, а == означает равенство. Для второго варианта (оператора) Expression1 по-прежнему является логическим выражением; но Expression2 приводит к значению, которое может быть или не быть логическим (true или false). Однако значение не должно быть пустым. Целью Expression2 является сообщение об ошибке программисту или пользователю. Во втором варианте двоеточие разделяет два выражения. Двоеточие не относится к первому варианту.
Любой оператор утверждения в конечном итоге означает истину или ложь из-за логического выражения. Если это правда, программа продолжается, как и ожидалось. Если оно ложно, то следует сообщить об ошибке.
assert Expression1 Validation
Приведенный выше пример кода для проверки повторяется здесь для быстрого (визуального) ознакомления:
Integer in = null;
if (in != null) {
System.out.println(«Do this.»);
//other statements
} else
System.out.println(«Test failed.»);
«assert Expression1» можно использовать для этого кода следующим образом:
Integer in = null;
assert in != null;
System.out.println(«Do this.»);
//other statements
Если для программы включено утверждение, и если утверждение установлено как ложное, как для этого конкретного кода, то операторы ниже утверждения утверждения не будут выполняться; и виртуальная машина Java (ОС) выдаст сообщение об ошибке. Если утверждение не включено для программы, будут выполняться операторы ниже утверждения утверждения, несмотря на то, что они ложны. Посмотрите, как включить утверждение для программы ниже.
Для этого кодирования утверждений программист позволяет JVM полностью обрабатывать сообщения об ошибках из-за отсутствия Expression2.
Предотвращение достижения предела
Приведенный выше пример кода для предотвращения достижения предела повторяется здесь для быстрого (визуального) ознакомления:
double d = 15, t = 3, s;
s = d / t;
if (s < 343) {
System.out.println(«Do this.»);
//other statements
} else
System.out.println(«Test failed.»);
«assert Expression1» можно использовать для этого кода следующим образом:
double d = 15, t = 3, s;
s = d / t;
assert s < 343;
System.out.println(«Do this.»);
//other statements
Если для программы включено утверждение, то для этого конкретного кода будут выполняться операторы ниже оператора утверждения, и виртуальная машина Java (ОС) не будет выдавать сообщение об ошибке; так как результат 5 меньше 343. Если утверждение не включено, операторы ниже утверждения утверждения все равно будут выполняться, потому что они будут игнорироваться, даже если они ложны. Посмотрите, как включить утверждение для программы ниже.
Для этого кодирования утверждений программист по-прежнему позволяет JVM полностью обрабатывать сообщения об ошибках; из-за отсутствия Expression2.
Expression2 Validation
Приведенный выше пример кода для проверки повторяется здесь для быстрого (визуального) ознакомления:
Integer in = null;
if (in != null) {
System.out.println(«Do this.»);
//other statements
} else
System.out.println(«Test failed.»);
Expression2 предназначен для сообщения об ошибках. Другая часть этого составного оператора if предназначена для сообщения об ошибках. Соответствующее использование оператора утверждения второй опции для этого кодирования может быть следующим:
Integer in = null;
assert in != null : in;
System.out.println(«Do this.»);
//other statements
Если для программы включено утверждение, то для этого конкретного кода операторы ниже оператора утверждения не будут выполняться, и виртуальная машина Java (ОС) выдаст сообщение об ошибке. На этот раз в сообщении об ошибке будет использоваться значение переменной in. Если утверждение не разрешено, то будут выполняться операторы, расположенные ниже утверждения утверждения, несмотря на то, что утверждение утверждения приводит к ложному результату. Посмотрите, как включить утверждение для программы ниже.
Для этого кодирования утверждений программист влияет на JVM при работе с сообщениями об ошибках из-за наличия Expression2 (in) — подробности см. ниже.
Предотвращение достижения предела
Приведенный выше пример кода для предотвращения достижения предела повторяется здесь для быстрого (визуального) ознакомления:
double d = 15, t = 3, s;
s = d / t;
if (s < 343) {
System.out.println(«Do this.»);
//other statements
} else
System.out.println(«Test failed.»);
Expression2 предназначен для сообщения об ошибках. Другая часть этого составного оператора if предназначена для сообщения об ошибках. Соответствующее использование оператора утверждения второй опции для этого кодирования может быть следующим:
double d = 15, t = 3, s;
s = d / t;
assert s < 343 : s;
System.out.println(«Do this.»);
//other statements
Если для программы включено утверждение, то для этого конкретного кода будут выполняться операторы, следующие за оператором утверждения, и виртуальная машина Java (ОС) не будет выдавать сообщение об ошибке; поскольку результат 5 меньше 343. Если результат (значение) s равен или больше 343, то сообщение об ошибке будет включать значение s. Если утверждение не включено, операторы ниже утверждения утверждения все равно будут выполняться, потому что они будут игнорироваться, даже если они приведут к ложному результату. Посмотрите, как включить утверждение для программы ниже.
Для этого кодирования утверждений программист влияет на JVM при работе с сообщениями об ошибках из-за Expression2 (s) — см. подробности ниже.
Enabling Assertion
Если программа имеет код утверждения, оператор утверждения будет эффективен для соблюдения оператора утверждения только в том случае, если программа включена. Включение оператора утверждения выполняется после компиляции Java-программы в байт-код. Это делается в командной строке при запуске программы. Делается это включением ключа -enableassertions. С переключателями в командной строке — не означает «забрать»; это дефис (пуля).
Использование переключателя работает только для выполнения программы. Если переключатель не используется, при следующем вызове программы выполнение будет игнорировать утверждение утверждения.
В этом разделе будет рассмотрен только код для проверки. Код проверки с оператором утверждения первой опции:
Integer in = null;
assert in != null;
System.out.println(«Do this.»);
//other statements
Предположим, что это метод main() основного класса и файла с именем TheClass. Обычно файл компилируется командой:
javac TheClass.java
Компиляция должна пройти успешно. С помощью переключателя результирующая программа байт-кода TheClass.class будет запущена в командной строке с помощью
java —enableassertions TheClass
Отчет (выход) будет:
Exception in thread «main» java.lang.AssertionError
at TheClass.main(TheClass.java:6)
Обратите внимание, что на выходе не упоминается значение null для переменной «in». При этом операторы ниже оператора assert в программе не выполняются.
Код проверки со вторым оператором подтверждения опции, который имеет «: in», выглядит следующим образом:
Integer in = null;
assert in != null : in;
System.out.println(«Do this.»);
//other statements
Предположим, что это метод main() основного класса и файла с именем TheClass. Файл будет скомпилирован командой:
javac TheClass.java
Компиляция должна пройти успешно. С помощью переключателя результирующая программа байт-кода TheClass.class будет запущена в командной строке с помощью
java —enableassertions TheClass
Отчет (выход) будет:
Exception in thread «main» java.lang.AssertionError: null
at TheClass.main(TheClass.java:6)
Обратите внимание, что значение null для переменной «in» на выходе упоминается как «: null» в первой строке вывода. При этом операторы ниже оператора assert в программе по-прежнему не выполняются из-за включения любого оператора assert в программе. Если переключатель -enableassertions в командной строке опущен, любые (или все) утверждения утверждений в программе будут игнорироваться. Код под ним все равно будет выполняться, даже если утверждения утверждения (логические выражения) ложны.
Заключение
Утверждение в Java — это утверждение, основанное на зарезервированном слове assert, имеющее логическое выражение и заканчивающееся точкой с запятой. Бывает, что определенные условия в программе могут препятствовать ее правильной работе. Оператор assert проверяет, существуют ли такие условия в программе.
Хорошие примеры использования утверждения утверждения находятся в валидации и для проверки того, не выходит ли результат вычисления за пределы. Есть две формы утверждения утверждения: одна не помогает в сообщении об ошибке, а другая помогает в сообщении об ошибке. Утверждение в Java включается в командной строке для скомпилированного байт-кода с помощью переключателя -enableassertions.