2012-05-16 91 views

回答

6

有點谷歌可能?

「你應該記住的主要原因是if-else語句應該用於程序流控制,而assert關鍵字只能用於測試目的。你不應該使用斷言來實際執行任何所需的操作爲您的應用程序正常工作 根據Sun的官方Java文檔:「每個斷言包含您認爲斷言執行時將是真正的布爾表達式。」「

瞭解更多:http://wiki.answers.com/Q/What_is_the_difference_between_assert_keyword_and_if_keyword_in_java#ixzz1v2GGfAhq

+0

請參閱下面的代碼 – jcy

+0

'int * ptr = malloc(sizeof(int)* 10);' 'assert(ptr);' '...' ' – jcy

+0

將您的代碼放在代碼標籤中,以便我可以更好地看到它。這取決於你是否想做一個測試。如果你不想將你的測試與實際的代碼分開,使用if-else exit。斷言僅用於測試目的^^ – Depado

3

你可以,斷言是專門設計用來斷言代碼的某些部分,

斷言會拋出AssertionError如果它不能斷言


請參見

2

if-else用於控制程序的流程。斷言不能用於此!斷言只是爲了在代碼中有「檢查點」來檢查「應該始終」匹配的條件。

運行程序時可以打開或關閉斷言,以便您可以在開發機器/集成環境中啓用斷言並在發佈版本中禁用它們。

2

斷言關鍵字只會在-ea上啓用斷言時觸發異常 命令行。 if/else將始終執行。除此之外,assert關鍵字允許編寫更少的冗長代碼。比較:

assert parameter != null; 

到:

if(parameter != null) 
{ 

} 
else 
{ 

} 
+0

當然,assert允許你編寫較少的詳細代碼,但是你仍然可以寫'if(prm == null)拋出新的異常(...);'。這些斷言並不是爲了這個目的而做出的,它們是這樣做的,當你的程序投入生產時,不會做無用的測試(因爲你的斷言總是被認爲是有效的)。因此,它們被從生產包中移除。 – belka

0

斷言,除非-ea參數是通過被忽略:

的java -ea myjar.jar

這樣的話,你可以使用它們當你測試你的應用程序時,在其他時候忽略它們。

3

我可以忽略斷言

class A{ 

public static void main(String[] args) { 
    assert false; 
    System.out.println("hi"); 
} 
} 

這段代碼打印喜默認

$ java -cp . A 
hi 
$ java -ea -cp . A 
Exception in thread "main" java.lang.AssertionError 
    at A.main(A.java:6) 
1

我能不能使用,如果(){}否則退出,而不是斷言?

是的,你可以,但是......

  • 您將無法打開測試,除非你提出的條件取決於一個額外的標誌(這使得它更復雜,等),

  • 你不會有機會在任何封閉finally塊進行整理向上,

  • 這將是更加複雜的登錄問題的原因比如果AssertionError(或任何其他異常)被拋出,並

  • 如果你需要的代碼在其他應用程序重複使用(不變化),你的exit調用可能是有問題的。