2015-01-10 1 views
-1

Я выполнил код следующим образом: java -ea HelloWorld, а для других кодов отображается AssertionError, но для этого конкретного кода я не получаю AssertionError.Почему программа не показывает AssertionError?

public class HelloWorld{ 

    public static void main(String []args){ 
     boolean b=true; 
     assert(b==true); 
     b=false;  
    } 
} 
+1

Утверждение применимо только к условию в точке кода, в котором помещено утверждение. Изменение значения, которое будет указано * после того, как * оператор 'assert' не будет повторно применять проверку утверждения. – hatchet

ответ

0

Вы утверждаете, что b==true, что он делает в момент утверждения выполняющей. Если утверждение ложно, то бросается AssertionError. Из Oracle documentation:

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

И он может быть применен в 2 различными способами :

Утверждение утверждения имеет две формы. Первая, более простая форма:

assertExpression1;

, где Выражение1 - выражение boolean. Когда система выполняет это утверждение, оно вычисляет Expression1, а если оно false, то выдает AssertionError без подробного сообщения.

Вторая форма оператора утверждение:

assertВыражение1: Выражение2;

где:

  • Выражение1 является boolean выражением.
  • Expression2 - выражение, которое имеет значение. (Это не может быть вызовом метода, который объявлен недействительным.)

Используйте эту версию assert заявления, чтобы обеспечить сообщение детализации AssertionError. Система передает значение Expression2 в соответствующий конструктор AssertionError, который использует строковое представление значения как подробное сообщение об ошибке.

+0

То, что я понимаю в утверждении, это, например, если я напишу assert (x> 5), то если где-нибудь в программе, если я назначаю x = 4, то будет показана ошибка утверждения ИЛИ, она говорит, что x должно получить значение больше 5 Теперь, в приведенном выше коде, я применяю тот же логический assert (b == true). Итак, если теперь в коде я переназначаю значение b как НЕ истинное, он должен выбросить AssertionError. –

+0

@SamarthMishra Читайте документацию Oracle, с которой я связан. В нем говорится, что ** Каждое утверждение содержит логическое выражение, которое, по вашему мнению, будет истинным, когда выполняется утверждение. **. Это не приводит к системному утверждению значения. Он оценивается как другой код. – mkobit

+0

Получил! Большое спасибо –

1

, если вы еще не поняли, как работает Java утверждение:

утверждают выражение: message_if_not_true

Поэтому, если ваше утверждение вычисляется как False, то вы получите сообщение об ошибке.

Что вы делаете:

assert(b == true) 

не будет вызывать AssertionError, потому что б установлена ​​истина на предыдущей строке. Проверьте документацию Java Oracle для утверждений.

+0

Спасибо, что я уже очистился! Но, еще раз спасибо –