3 回答

TA貢獻1798條經驗 獲得超3個贊
如果您有啟動您的程序-enableassertions(或-ea簡稱),那么這種說法
assert cond;
相當于
if (!cond)
throw new AssertionError();
如果不使用此選項啟動程序,則assert語句將無效。
例如assert d >= 0 && d <= s.length();,如張貼在你的問題,相當于
if (!(d >= 0 && d <= s.length()))
throw new AssertionError();
(如果您啟動的-enableassertions是。)
Java語言規(guī)范assert正式為:14.10。該聲明說:
14.10。的assert聲明
的斷言是一個assert含有一個布爾表達式語句。一個斷言啟用或者禁用。如果啟用了斷言,則斷言的執(zhí)行將導致對布爾表達式進行求值,并且如果表達式的求值為,則會報告錯誤false。如果斷言被禁用,則斷言的執(zhí)行不起作用。
當“啟用或禁用”控制與-ea開關和“報告錯誤”意味著AssertionError被拋出。
最后,一個鮮為人知的功能assert:
您可以: "Error message"像這樣追加:
assert d != null : "d is null";
指定應該拋出什么AssertionError的錯誤消息。

TA貢獻1906條經驗 獲得超10個贊
盡管我已經閱讀了很多有關此文檔的文檔,但是我仍然對如何,何時以及在何處使用它感到困惑。
使它很容易理解:
當您遇到類似情況時:
String strA = null;
String strB = null;
if (2 > 1){
strA = "Hello World";
}
strB = strA.toLowerCase();
您可能會收到警告(在strB = strA.toLowerCase()上顯示黃線),該警告可能會給strB產生NULL值。盡管您知道strB最終絕對不會為null,以防萬一,您可以使用assert來
1.禁用警告。
2.如果發(fā)生最壞的事情(運行應用程序時),將引發(fā)Exception錯誤。
有時,當您編譯代碼時,不會得到結果,這是一個錯誤。但是應用程序不會崩潰,并且您花費大量時間來查找導致此錯誤的原因。
因此,如果您將assert設置為:
assert strA != null; //Adding here
strB = strA .toLowerCase();
您告訴編譯器strA絕對不是空值,它可以“和平地”關閉警告。如果它為NULL(最壞的情況),它將停止應用程序并向您拋出錯誤以查找它。
添加回答
舉報