在Java中,为什么断言关键字而不是方法?

Run*_*oro 9 java methods assert

为什么assertjava中有关键字,而不是方法?

方法断言可能如下所示:

public static void assert(boolean condition) {
    if(!condition) {
        throw new AssertionError();
    }
}
Run Code Online (Sandbox Code Playgroud)

Ada*_*ion 9

Java®语言规范中提供了此问题的答案

断言是包含布尔表达式的断言语句.断言被启用或禁用.如果断言已启用,则断言的执行会导致对布尔表达式进行求值,如果表达式求值为false,则会报告错误.如果断言被禁用,则断言的执行不会产生任何影响.

那么,如果assert是一种方法,那么这样的代码:

assert(check());
Run Code Online (Sandbox Code Playgroud)

无论是启用还是禁用断言,始终调用该check方法.

现在,由于assert是一个具有特殊处理的关键字(如上所述),只有在启用断言时check才会调用该方法,因为只有这个断言的布尔表达式才会被计算.