什么是assert
做?
private static int charAt(String s, int d) {
assert d >= 0 && d <= s.length();
if (d == s.length()) return -1;
return s.charAt(d);
}
答案
如果你启动你的程序-enableassertions
(或者-ea
简称)然后这个声明
assert cond;
相当于
if (!cond)
throw new AssertionError();
如果您在没有此选项的情况下启动程序,则断言语句将不起作用。
例如,assert d >= 0 && d <= s.length();
正如您的问题中所发布的,相当于
if (!(d >= 0 && d <= s.length()))
throw new AssertionError();
(如果您启动时使用的是-enableassertions
那是。)
正式,Java 语言规范:14.10。assert
陈述说以下几点:
14.10. The
assert
Statement
断言是一个assert
包含布尔表达式的语句。either enabled or disabled 。an error is reported 如果表达式的计算结果为false
。
在哪里*“启用或禁用”* 控制与-ea
开关和*“报告错误”* 意味着一个AssertionError
被抛出。
最后,还有一个鲜为人知的功能assert
:
您可以附加: "Error message"
像这样:
assert d != null : "d is null";
指定抛出的 AssertionError 的错误消息应该是什么。
这篇文章已被重写为一篇文章这里。