这个问题来自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),但我想它应该是两次,即断言是开启的;在两种情况下都断言
答案 0 :(得分:1)
到Java Language Specification我们去
如果值为true,则不执行进一步操作和断言 声明正常完成。
如果值为false,则执行行为取决于是否 表达式2存在:
如果存在Expression2,则对其进行评估。
如果评估由于某种原因突然完成,则断言语句会因同样的原因突然完成。
如果评估正常完成,则“详细消息”为Expression2的结果值的AssertionError实例为 创建
如果由于某种原因实例创建突然完成,则断言语句会因同样的原因而突然完成。
如果实例创建正常完成,则通过抛出新创建的AssertionError突然完成assert语句 对象
如果禁用断言,则跳过assert
,assertsOn
为true
,因此执行if
块。
如果启用了断言,则执行assert
,assertsOn
为true
,因此断言通过。 assertsOn
为true
,因此会执行if
块。
答案就是你说的。
assert is on ; assert is on
可能有些事情你没有告诉/向我们展示,或者那里提供的答案错过了正确的答案。