我正在研究1Z0-851 Oracla Java SE 1.6认证,我看到了这个问题:
我将第一个选项标记为正确选项并失败了! “所有断言语句都被恰当地使用”,答案是第一个assert(x > 0);
不正确..问题是为什么?
答案 0 :(得分:4)
正确答案是这个
断言的适当和不当使用
您可以在任何您不希望正常到达的位置放置断言。 断言可用于验证传递给私有方法的参数。然而, 断言不应该用于验证传递给公共方法的参数,因为a 无论是否启用断言,public方法都必须检查其参数 不。但是,您可以在公共和非公共中使用断言测试后置条件 方法。此外,断言不应以任何方式更改程序的状态。
答案 1 :(得分:3)
第12行是多余的。
如果删除它,第15行的断言将涵盖x <= 0
说实话,这是一个措辞奇怪的问题,但这就是我所能看到的。我不确定是什么意思
答案 2 :(得分:1)
如果只读取第一个断言语句 - 由于其位置应该被解释为“前置条件” - 它意味着该函数应该对任何正的int值正常工作,这是不正确的。因此,这种说法具有误导性。
答案 3 :(得分:0)
从go2
开始,很容易理解断言
该方法没有做任何事情,只是断言你的期望x < 0
。
另一方面,go
方法有一个switch
assert false
条款default
是一个好习惯,如果您绝对不希望您的程序属于本条款,即,在正常情况下,其中一个case
必须是正确的。
switch
上的唯一案例是x
完全 2
。
因此,总而言之,您不希望 x
大于0
,正如第一个断言所说,您希望x
为2
并且没有其他的。因此,断言未正确使用。
但是,正如Jeff所述,case
没有break
,这意味着default
将始终执行,在每种情况下都会导致{{1} }}
结论:assert false
方法应该始终导致错误,正确使用go
,而assert false
根本不正确。