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