2013-05-27 35 views

回答

9

回答这个问题是可以在The Java® Language Specification

断言是一个包含布尔表达式的断言语句。断言是启用还是禁用。如果启用了断言,断言的执行会导致评估布尔表达式,并且如果表达式计算结果为false,则会报告错误。如果断言被禁用,则断言的执行没有任何效果。

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

assert(check()); 

总是调用check方法,无论断言是否启用或禁用。

现在,由于assert是具有特殊处理的关键词(如上所述)的check方法将被调用当断言为才启用此断言的布尔表达式进行评价。

1

一个可能的原因是断言可以被启用或禁用 - 这在使用关键字而不是方法的Java(一种没有预处理器的语言)中更好地建模,因为假设一个方法是代码总是运行(即使断言被禁用时,编译器也可以删除方法调用)。

将此与例如以下的断言对比。 C或C++,在那里你有一个预处理器 - 在这种情况下,根据是否定义一个特定的预处理器标志来预处理这些断言就足够了。

2

可以在不更改代码的情况下打开和关闭Java断言。这样可以避免生产中断言的运行时间开销,同时利用其在开发环境中的调试价值。

在应用程序代码中作为方法调用实现的断言无法执行。即使这种方法可以根据每个环境的需要进行短路或短路,循环总是通过方法调用和测试来确定是否激活。

实际上,Java声明关键字并不流行,至少在目前这个时候没有。断言更常用于JUnit测试,正如其他海报所触及的。在JUnit世界中,断言方法调用。由于它们不在主线代码中,因此它们在生产中没有开销;它们在单独的测试代码中,只能在开发环境中运行。

相关问题