2014-03-06 129 views
2

此問題來自SCJP轉儲。可能這看起來很愚蠢,但我對選項有些困惑。請幫我SCJP聲明語句

公共類Donkey2 {

public static void main(String[] args) { 

    boolean assertsOn = true; 

    assert (assertsOn) : assertsOn = true; 

      if(assertsOn) { 

        System.out.println("assert is on"); 

         } 

      } 

}

如果類驢被調用了兩次,第一次沒有斷言啓用,並且第二次與 斷言啓用,結果如何?

A.沒有輸出

B.沒有輸出;斷言是

C.斷言是

D.無輸出;拋出一個AssertionError。

E. assert is on;一個AssertionError被拋出

回答)如果我調用它兩次我會得到 斷言是 斷言是

是真的嗎?

書說答案是C)但我想它應該是兩次即斷言是在;斷言是在這兩種情況下

+2

當你跑它時發生了什麼? – Reimeus

+0

現在我沒有編譯器來啓用和禁用斷言。 – user2985842

回答

1

Java Language Specification我們去

如果該值爲true,沒有進一步採取行動,並斷言 語句正常完成。

如果該值是假,則執行行爲取決於 表達式2是否存在:

  • 如果表達式2存在時,它被評估。

    • 如果評估由於某種原因突然完成,由於相同的原因assert語句突然完成。

    • 如果評估正常完成,則其「詳細消息」是Expression2的結果值的AssertionError實例是 已創建。

    • 如果實例創建由於某種原因突然完成,則出於同樣的原因,assert語句會突然完成。

    • 如果實例創建正常完成,則通過拋出新創建的AssertionError 對象,assert語句突然完成。

如果斷言被禁用,assert被跳過,assertsOntrue,所以執行if塊。

如果聲明已啓用,則執行assertassertsOntrue,所以斷言通過。 assertsOntrue,因此執行if塊。

答案就是你所說的。

assert is on ; assert is on 

有可能是你沒有告訴我們或向我們展示的答案缺少正確的答案。

+0

這是純粹的主觀,但(C)的意思是,「assert is on」是爲兩種選擇而打印的,因爲如果你看看選項(A,B,C,D,E),兩種選擇只適用於不同的選擇。類似的選項(A)表示兩種情況下都沒有輸出 –