8

javaassert 和 和 有什么不一样if () {} else exit;

我可以用if () {} else exit代替assert吗?

4

7 回答 7

8

可能有点谷歌?

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

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

于 2012-05-16T12:34:41.167 回答
3

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

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


另见

于 2012-05-16T12:33:49.837 回答
3

我可以忽略断言

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)
于 2012-05-16T12:37:24.447 回答
3

我可以用if () {} else exit代替assert吗?

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

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

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

  • AssertionError与抛出(或任何其他异常)相比,记录问题的原因会更复杂,并且

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

于 2012-05-16T12:56:51.380 回答
2

if-else 用于控制程序的流程。断言不能用于此!断言只是为了在你的代码中有“检查点”来检查“应该总是”匹配的条件。

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

于 2012-05-16T12:34:40.017 回答
2

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

assert parameter != null;

到:

if( parameter != null )
{

}
else
{

}
于 2012-05-16T12:34:45.873 回答
1

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

java -ea myjar.jar

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

于 2012-05-16T12:35:42.590 回答