java ' assert ' 和 ' if () {} else exit;' 之间的区别



Java assertif () {} else exit; 有什么区别?

我可以只使用if () {} else exit而不是assert吗?

也许有点

谷歌?

"你应该记住的主要事情是,if-else 语句应该用于程序流控制,assert 关键字应该仅用于测试目的。切勿使用断言来实际执行应用程序正常工作所需的任何操作。根据Sun的官方Java文档:"每个断言都包含一个布尔表达式,你认为在断言执行时该表达式是正确的。">

阅读更多:http://wiki.answers.com/Q/What_is_the_difference_between_assert_keyword_and_if_keyword_in_java#ixzz1v2GGfAhq

你可以,断言是专门为断言代码的某些部分而设计的,

断言如果断言失败,将抛出AssertionError


另请参阅

  • assert参考
  • 资料

我可以忽略断言

class A{
public static void main(String[] args) {
    assert false;
  System.out.println("hi");
}
}

此代码默认将打印 hi

$ java -cp . A
hi
$ java -ea -cp . A
Exception in thread "main" java.lang.AssertionError
    at A.main(A.java:6)

我可以只使用if () {} else exit而不是assert吗?

是的,你可以,但是...

  • 除非您使条件依赖于额外的标志(这使它更加复杂等(,否则您将无法关闭测试,

  • 您将没有机会在任何封闭的finally块中进行整理,

  • 记录问题的原因比抛出AssertionError(或任何其他异常(要复杂得多,并且

  • 如果您的代码需要在另一个应用程序中重用(按原样(,则对exit的调用可能会出现问题。

if-else 用于控制程序的流程。 断言不能用于此!断言只是为了在代码中使用"检查点"来检查"应始终"匹配的条件。

运行程序时可以打开或关闭断言,以便您可以在开发计算机/集成环境中启用断言,并在已发布版本中禁用它们。

assert 关键字仅在命令行上启用带有 -ea 的断言时触发异常。if/else 将始终执行。最重要的是,assert关键字允许编写不太冗长的代码。比较:

assert parameter != null;

自:

if( parameter != null )
{
}
else
{
}

除非传递 -ea 参数,否则断言将被忽略:

Java -EA Myjar.jar

这样,您可以在测试应用程序时使用它们,但在其他时间忽略它们。

最新更新