问题
这个问题在这里已有答案:
- Java断言关键字做了什么,何时应该使用它? 17个答案
assert
do是什么?例如在函数中:
private static int charAt(String s, int d) {
assert d >= 0 && d <= s.length();
if (d == s.length()) return -1;
return s.charAt(d);
}
#1 热门回答(218 赞)
如果你使用-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语言规范:14.10。 Theassert
Statementsays以下内容:
14.10。断言语句断言是包含布尔表达式的断言语句。断言启用或禁用。如果断言已启用,则断言的执行会导致对布尔表达式进行求值,如果表达式求值为false,则会报告错误。如果断言被禁用,则断言的执行不会产生任何影响。
使用-ea
开关控制"启用或禁用"并且"报告错误"表示抛出anAssertionError
。
##最后,一个鲜为人知的断言功能:
你可以像这样追加2,35274292:
assert d != null : "d is null";
指定抛出的AssertionError的错误消息应该是什么。
此帖已被重写为文章here。
#2 热门回答(12 赞)
如果不满足条件,将抛出anAssertionError
。
但是必须启用断言;否则assert
表达式什么都不做。看到:
http://java.sun.com/j2se/1.5.0/docs/guide/language/assert.html#enable-disable
#3 热门回答(5 赞)
assert
是一个调试工具,如果条件不为真,将导致程序抛出aAssertionFailed
exception。在这种情况下,如果它后面的两个条件中的任何一个评估为false,程序将抛出异常。一般来说,assert
不应该在生产代码中使用