Java Assert语句用法,考试认证1Z0-851

时间:2013-02-25 17:37:39

标签: java

我正在研究1Z0-851 Oracla Java SE 1.6认证,我看到了这个问题:

Question from test

我将第一个选项标记为正确选项并失败了! “所有断言语句都被恰当地使用”,答案是第一个assert(x > 0);不正确..问题是为什么?

4 个答案:

答案 0 :(得分:4)

正确答案是这个

断言的适当和不当使用

您可以在任何您不希望正常到达的位置放置断言。 断言可用于验证传递给私有方法的参数。然而, 断言不应该用于验证传递给公共方法的参数,因为a 无论是否启用断言,public方法都必须检查其参数 不。但是,您可以在公共和非公共中使用断言测试后置条件 方法。此外,断言不应以任何方式更改程序的状态。

Src:http://www.freejavaguide.com/java-scjp-part1.pdf

答案 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,正如第一个断言所说,您希望x2并且没有其他的。因此,断言未正确使用。

但是,正如Jeff所述,case没有break,这意味着default将始终执行,在每种情况下都会导致{{1} }}

结论assert false方法应该始终导致错误,正确使用go,而assert false根本不正确。