2013-02-25 17 views
6

我STUDING爲1Z0-851 Oracla的Java SE 1.6認證,我看到了這樣一個問題:的Java斷言語句用法,考試認證1Z0-851

Question from test

標誌着我第一選擇是正確的,並失敗! 「所有斷言陳述都被恰當地使用了」,答案是第一個assert(x > 0);不正確。問題是爲什麼?

+1

「適當地使用」 的術語是非常主觀的,因此混亂。他們應該澄清這個問題。 – 2013-02-25 17:47:46

+0

也看看這個[答案](http://stackoverflow.com/questions/1957645/when-to-use-assertion-vs-exception) – Amarnath 2013-02-25 17:47:50

+1

如果他們使用一個代碼樣本甚至少量的意義。 – asteri 2013-02-25 17:55:17

回答

4

正確的答案是這樣的

恰當和不恰當使用斷言

,你可以在你不希望正常到達的任何位置放置一個斷言。 斷言可用於驗證傳遞給私有方法的參數。但是,不應使用 聲明來驗證傳遞給公共方法的參數,因爲公共方法必須檢查其參數,而不管是否啓用聲明或不聲明 。但是,您可以使用公開方法和非公開方法中的斷言來測試後置條件。此外,斷言不應以任何方式改變程序的狀態。

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

+0

gooooood人!!!最後正確的答案! – thiagoh 2013-02-25 19:19:47

+0

+1不錯,不知道。雖然我個人只使用單元測試的斷言..! – cowls 2013-02-26 08:42:48

1

如果你只讀了第一個assert語句 - 由於它的位置,它應該被解釋爲「前置條件」,這意味着該函數應該適用於任何正的int值,這是不正確的。因此,這種說法是誤導性的。

+0

函數不適用於x的任何值。要麼是一個負數,並且第一個失敗,或者「斷言」。 – asteri 2013-02-25 17:54:44

3

第12行是多餘的。

,如果你刪除它,第15行的斷言將覆蓋情況下x <= 0

說實話它的一個奇怪的措辭問題,但是這是我看到的一切。我不知道什麼是適當的

0

go2開始,很容易理解斷言。
該方法什麼都不做,它只是聲稱你的期望,即x < 0。另一方面,go方法有switch
這是很好的做法assert falsedefault條款,如果你絕對不要指望你的程序屬於這一條款下,,在正常情況下,該case S的一個人是正確的。

switch的唯一情況預計x準確2
所以,總之,你不要指望x大於0,正如第一個斷言所說,你期望x2而沒有別的。因此,斷言不適當地使用。

然而,正如Jeff指出的那樣,case沒有break,這意味着default就一定會執行,導致在每一個場景中,爲了assert false

結論:go方法應該總是導致一個錯誤,使得assert false正常使用,而assert x > 0是不正確的。

+1

除了'情況2'沒有相應的'break',這意味着它總是會經歷'assert false'。 – asteri 2013-02-25 17:53:12

+0

很好的發現。我自動承擔了「休息」。 – afsantos 2013-02-25 17:55:00

+0

我也是,當我第一次讀它。這就是爲什麼我必須刪除我自己的答案。哈哈 – asteri 2013-02-25 18:01:34