“断言”关键字有什么作用?

2022-08-31 08:07:32

有什么作用?例如,在函数中: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);
}

答案 1

如果您使用(或简称)启动程序,则此语句-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。断言语句是这样说的:

14.10. 断言语句
断言是包含布尔表达式的断言语句。断言已启用或已禁用。如果启用了断言,则执行断言会导致对布尔表达式的计算,如果表达式的计算结果为 false则会报告错误。如果禁用断言,则断言的执行将没有任何影响。

其中“启用或禁用”由开关控制,“报告错误”表示抛出。-eaAssertionError


最后,一个鲜为人知的特征:assert

您可以像这样附加:: "Error message"

assert d != null : "d is null";

以指定抛出的断言错误应是什么错误消息。


这篇文章已经重写为一篇文章在这里


答案 2

如果不满足该条件,将抛出 an。AssertionError

但是,必须启用断言;否则,表达式不执行任何操作。看:assert

http://java.sun.com/j2se/1.5.0/docs/guide/language/assert.html#enable-disable


推荐