java assert
和if() {} else exit;
有何區別?java'assert'和'if(){} else else'之間的區別
我可以只使用if() {} else exit
而不是assert
?
java assert
和if() {} else exit;
有何區別?java'assert'和'if(){} else else'之間的區別
我可以只使用if() {} else exit
而不是assert
?
有點谷歌可能?
「你應該記住的主要原因是if-else語句應該用於程序流控制,而assert關鍵字只能用於測試目的。你不應該使用斷言來實際執行任何所需的操作爲您的應用程序正常工作 根據Sun的官方Java文檔:「每個斷言包含您認爲斷言執行時將是真正的布爾表達式。」「
if-else用於控制程序的流程。斷言不能用於此!斷言只是爲了在代碼中有「檢查點」來檢查「應該始終」匹配的條件。
運行程序時可以打開或關閉斷言,以便您可以在開發機器/集成環境中啓用斷言並在發佈版本中禁用它們。
斷言關鍵字只會在-ea
上啓用斷言時觸發異常 命令行。 if/else將始終執行。除此之外,assert關鍵字允許編寫更少的冗長代碼。比較:
assert parameter != null;
到:
if(parameter != null)
{
}
else
{
}
當然,assert允許你編寫較少的詳細代碼,但是你仍然可以寫'if(prm == null)拋出新的異常(...);'。這些斷言並不是爲了這個目的而做出的,它們是這樣做的,當你的程序投入生產時,不會做無用的測試(因爲你的斷言總是被認爲是有效的)。因此,它們被從生產包中移除。 – belka
斷言,除非-ea參數是通過被忽略:
的java -ea myjar.jar
這樣的話,你可以使用它們當你測試你的應用程序時,在其他時候忽略它們。
我可以忽略斷言
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)
我能不能使用,如果(){}否則退出,而不是斷言?
是的,你可以,但是......
您將無法打開測試,除非你提出的條件取決於一個額外的標誌(這使得它更復雜,等),
你不會有機會在任何封閉finally
塊進行整理向上,
這將是更加複雜的登錄問題的原因比如果AssertionError
(或任何其他異常)被拋出,並
如果你需要的代碼在其他應用程序重複使用(不變化),你的exit
調用可能是有問題的。
你有沒有試過閱讀關於'assert'的文檔以及它做了什麼? – dhblah