Заявление об утверждении SCJP

Этот вопрос из дампов SCJP. Может быть, это кажется глупым, но я немного запутался с опциями. пожалуйста, помогите мне

общественный класс Donkey2 {

   public static void main(String[] args) {

    boolean assertsOn = true;

    assert (assertsOn) : assertsOn = true;

           if(assertsOn) {

                     System.out.println("assert is on");

                         }

          }

}

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

А. нет выхода

Б. нет выхода; утверждение включено

C. утверждение включено

D. нет выхода; Выдается AssertionError.

E. утверждение включено; Выдается AssertionError

Ответ), если я вызову его дважды, я получу утверждение, что оно включено.

Это правда?

Книга говорит, что ответ C), но я думаю, что это должно быть дважды, т.е. утверждение включено; assert включен в обоих случаях


person user2985842    schedule 06.03.2014    source источник
comment
Что произошло, когда вы запустили его?   -  person Reimeus    schedule 06.03.2014
comment
сейчас у меня нет компилятора для включения и отключения утверждения.   -  person user2985842    schedule 06.03.2014


Ответы (1)


К Спецификации языка Java мы идем

Если значение равно true, дальнейшие действия не предпринимаются, и оператор assert завершается нормально.

Если значение равно false, поведение выполнения зависит от того, присутствует ли Expression2:

  • Если Expression2 присутствует, оно оценивается.

    • Если по какой-то причине оценка завершается внезапно, оператор assert завершается внезапно по той же причине.

    • Если оценка завершается нормально, создается экземпляр AssertionError, чье «подробное сообщение» является результирующим значением Expression2.

    • Если создание экземпляра по какой-либо причине завершается внезапно, оператор assert завершается внезапно по той же причине.

    • Если создание экземпляра завершается нормально, оператор assert завершается внезапно, выбрасывая только что созданный объект AssertionError.

Если утверждение отключено, assert пропускается, assertsOn заменяется true, поэтому выполняется блок if.

Если утверждение включено, выполняется assert, assertsOn равно true, поэтому утверждение проходит. assertsOn равно true, поэтому выполняется блок if.

Ответ таков, как вы говорите.

assert is on ; assert is on

Возможно, вы что-то не рассказываете/не показываете нам, или в представленных там ответах отсутствует правильный.

person Sotirios Delimanolis    schedule 06.03.2014
comment
Это чисто субъективно, но (C) означает, что утверждение включено для обоих вариантов, потому что, если вы посмотрите на варианты (A, B, C, D, E), два варианта предназначены только для вариантов, которые имеют разные варианты. Точно так же вариант (A) означает отсутствие вывода для обоих случаев. - person ishaan arora; 24.10.2015