SCJP断言声明

时间:2014-03-06 17:53:05

标签: java 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被调用两次,第一次没有启用断言,第二次调用 启用断言,结果是什么?

一个。没有输出

B中。没有输出;断言是

℃。断言是

d。没有输出;抛出AssertionError。

电子。断言是开;抛出AssertionError

答案)如果我调用它两次,我会得到           断言是开启的           断言是

这是真的吗?

书上说答案是C),但我想它应该是两次,即断言是开启的;在两种情况下都断言

1 个答案:

答案 0 :(得分:1)

Java Language Specification我们去

  

如果值为true,则不执行进一步操作和断言   声明正常完成。

     

如果值为false,则执行行为取决于是否   表达式2存在:

     
      
  • 如果存在Expression2,则对其进行评估。

         
        
    • 如果评估由于某种原因突然完成,则断言语句会因同样的原因突然完成。

    •   
    • 如果评估正常完成,则“详细消息”为Expression2的结果值的AssertionError实例为   创建

    •   
    • 如果由于某种原因实例创建突然完成,则断言语句会因同样的原因而突然完成。

    •   
    • 如果实例创建正常完成,则通过抛出新创建的AssertionError突然完成assert语句   对象

    •   
  •   

如果禁用断言,则跳过assertassertsOntrue,因此执行if块。

如果启用了断言,则执行assertassertsOntrue,因此断言通过。 assertsOntrue,因此会执行if块。

答案就是你说的。

assert is on ; assert is on

可能有些事情你没有告诉/向我们展示,或者那里提供的答案错过了正确的答案。