一尘不染

“ assert”关键字有什么作用?

java

怎么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);
}

阅读 396

收藏
2020-03-23

共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语言规范assert正式为:14.10。该声明说:

14.10。的assert声明
的断言是一个assert含有一个布尔表达式语句。断言是启用还是禁用。如果启用了断言,则断言的执行将导致对布尔表达式进行求值,并且如果表达式的求值为,则会报告错误false。如果断言被禁用,则断言的执行不起作用。

当“启用或禁用”控制与-ea开关和“报告错误”意味着AssertionError被抛出。

最后,一个鲜为人知的功能assert:
你可以: "Error message"像这样追加:

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

指定应该抛出什么AssertionError的错误消息。

2020-03-23