在开发和部署期间,断言语句的行为如何

时间:2011-03-23 08:56:22

标签: java assert

任何人都可以解释声明的含义“断言让你在开发过程中测试你的假设,但断言代码基本上在程序部署时消失,不留下任何开销或调试代码来追踪和删除”

3 个答案:

答案 0 :(得分:4)

编辑:断言应该用于检测编码错误而不是输入错误。

它们允许您以打开断言时可以强制执行的方式记录编码中的假设。然而,这些检查是经过良好测试的程序一旦发布就不需要的检查。

它们不适合验证用户输入,因为它们不是友好的,并且假设修复失败的断言的唯一方法是修复代码(通常在此过程中杀死或禁用程序)

为了验证用户输入,if(!condition) friendly_user_message()是一种更好的方法。


断言允许您执行昂贵的测试,希望能够关闭生产cocde。

当您没有打开断言时,JVM会优化断言。

编辑:如果断言打开,您可能需要执行复杂的检查。有两种方法可以做到这一点。

boolean debug = false;
assert debug = true;

if (debug) // do something.

OR

assert validate();

// later
private boolean validate() {

     return passed;
}

答案 1 :(得分:2)

它通常意味着,因为断言在开发时纯粹是一个开发工具,您可以使用-enableassertions或-ea开关运行您的VM,这些开关将在运行时执行您的断言,这是“断言让您在开发期间测试您的假设“声明的一部分。

我会假设你正在阅读的内容“部署”(生产可能?)意味着VM运行时没有-enableassertions或-ea运行你的断言(它只会跳过它们)因此“不留下任何开销或调试代码来追踪并删除”。

答案 2 :(得分:0)

在运行程序时,通过指定-enableassertions-ea开关来启用java中的断言。否则,您的所有assert语句都将被忽略。右here你有一个断言教程的链接。希望能提供帮助。