【问题标题】:SCJP assert statementSCJP 断言声明
【发布时间】:2014-04-09 13:06:31
【问题描述】:

这个问题来自 SCJP 转储。可能看起来很愚蠢,但我对选项有点困惑。请帮帮我

公共类 Donkey2 {

   public static void main(String[] args) {

    boolean assertsOn = true;

    assert (assertsOn) : assertsOn = true;

           if(assertsOn) {

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

                         }

          }

}

如果调用 Donkey 类两次,第一次没有启用断言,第二次启用 断言启用,结果如何?

A.没有输出

B.没有输出;断言开启

C.断言开启

D.没有输出;抛出 AssertionError。

E.断言开启;抛出一个 AssertionError

Answer ) 如果我调用它两次,我会得到 断言开启 断言开启

这是真的吗?

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

【问题讨论】:

  • 你运行它时发生了什么?
  • 现在我没有编译器来启用和禁用断言。

标签: java scjp


【解决方案1】:

我们去Java Language Specification

如果值为真,则不采取进一步行动,断言 语句正常完成。

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

  • 如果 Expression2 存在,则对其求值。

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

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

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

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

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

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

答案就是你所说的。

assert is on ; assert is on

可能有些事情您没有告诉/展示给我们,或者那里提供的答案缺少正确的答案。

【讨论】:

  • 这纯粹是主观的,但 (C) 意味着,两个选项都打印“assert is on”,因为如果您查看选项 (A,B,C,D,E) 两个选项仅适用于具有不同选择的选项。类似的选项(A)意味着两种情况都没有输出
猜你喜欢
  • 1970-01-01
  • 2012-12-11
  • 2022-11-03
  • 2020-04-12
  • 1970-01-01
  • 2012-03-05
  • 2023-03-11
  • 1970-01-01
  • 2015-10-27
相关资源
最近更新 更多