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

Java断言语句用法,考试认证1Z0-851,java,Java,我正在学习1Z0-851 Oracla Java SE 1.6认证,我看到了这个问题: 我将第一个备选方案标记为正确的,但失败了!“所有的断言语句都被恰当地使用了”,答案是第一个assert(x>0)不正确。。问题是为什么?如果只阅读第一条assert语句——由于它的位置,应该将其解释为“先决条件”——它意味着函数应该与任何正int值一起正常工作,这是不正确的。因此,该断言是误导性的。第12行是多余的 如果删除它,第15行上的断言将涵盖以下情况:从go2开始的x,很容易理解断言。 该方法不起任

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


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

如果只阅读第一条assert语句——由于它的位置,应该将其解释为“先决条件”——它意味着函数应该与任何正int值一起正常工作,这是不正确的。因此,该断言是误导性的。

第12行是多余的


如果删除它,第15行上的断言将涵盖以下情况:从
go2
开始的
x,很容易理解断言。
该方法不起任何作用,它只是断言您的期望,即
x<0

另一方面,
go
方法有一个
开关

default
子句上
断言false
是一种良好的做法,如果绝对不希望您的程序属于此子句,即在正常情况下,
案例之一必须是正确的

开关
上的唯一一种情况要求
x
精确地
2

因此,总而言之,您并不期望
x
大于
0
,正如第一个断言所说,您期望
x
2
,除此之外什么都没有。因此,断言没有被适当地使用

但是,如前所述,
案例
没有
中断
,这意味着将始终执行
默认
,在每个场景中导致
断言false


结论:使用
go
方法总会导致错误,使
assert false
正确使用,而
assert x>0
根本不正确。

正确答案是

断言的适当和不适当使用

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


Src:

术语“适当使用”非常主观,因此存在混淆。他们应该澄清这个问题。同时看看这一点,如果他们使用的代码示例即使是很有意义的,也会很有帮助。除了
案例2
没有相应的
中断
,这意味着
断言false
也会失败。发现得很好。当我第一次读到它时,我自动假定
中断
。我也是。这就是为什么我必须删除我自己的答案。好地方,我也错过了。不管怎么说,我的回答几乎站得住脚,但这个问题似乎确实存在nonsensical@Jeff已编辑,根据您的评论。该函数不适用于任何x值。要么它是一个负数,第一次失败,要么它
assert false
s.+1 Nice,我不知道。虽然我个人只在单元测试中使用断言。。!