2013-05-27 51 views

回答

9

回答這個問題是可以在The Java® Language Specification

斷言是一個包含布爾表達式的斷言語句。斷言是啓用還是禁用。如果啓用了斷言,斷言的執行會導致評估布爾表達式,並且如果表達式計算結果爲false,則會報告錯誤。如果斷言被禁用,則斷言的執行沒有任何效果。

所以,如果assert是一個方法,那麼這樣的代碼:

assert(check()); 

總是調用check方法,無論斷言是否啓用或禁用。

現在,由於assert是具有特殊處理的關鍵詞(如上所述)的check方法將被調用當斷言爲才啓用此斷言的布爾表達式進行評價。

1

一個可能的原因是斷言可以被啓用或禁用 - 這在使用關鍵字而不是方法的Java(一種沒有預處理器的語言)中更好地建模,因爲假設一個方法是代碼總是運行(即使斷言被禁用時,編譯器也可以刪除方法調用)。

將此與例如以下的斷言對比。 C或C++,在那裏你有一個預處理器 - 在這種情況下,根據是否定義一個特定的預處理器標誌來預處理這些斷言就足夠了。

2

可以在不更改代碼的情況下打開和關閉Java斷言。這樣可以避免生產中斷言的運行時間開銷,同時利用其在開發環境中的調試價值。

在應用程序代碼中作爲方法調用實現的斷言無法執行。即使這種方法可以根據每個環境的需要進行短路或短路,循環總是通過方法調用和測試來確定是否激活。

實際上,Java聲明關鍵字並不流行,至少在目前這個時候沒有。斷言更常用於JUnit測試,正如其他海報所觸及的。在JUnit世界中,斷言方法調用。由於它們不在主線代碼中,因此它們在生產中沒有開銷;它們在單獨的測試代碼中,只能在開發環境中運行。

相關問題