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

时间:2012-05-16 12:31:55

标签: java assert

java assertif () {} else exit;之间有什么区别?

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

7 个答案:

答案 0 :(得分:8)

有点谷歌吗?

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

了解详情:http://wiki.answers.com/Q/What_is_the_difference_between_assert_keyword_and_if_keyword_in_java#ixzz1v2GGfAhq

答案 1 :(得分:3)

你可以,断言专门设计用于断言代码的某些部分,

如果断言无法断言,

断言将抛出AssertionError


另见

答案 2 :(得分:3)

我可以忽略断言

class A{

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

此代码默认打印为

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

答案 3 :(得分:2)

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

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

答案 4 :(得分:2)

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

assert parameter != null;

为:

if( parameter != null )
{

}
else
{

}

答案 5 :(得分:1)

  

我可以使用if(){} else退出而不是断言吗?

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

  • 除非你的条件取决于额外的标志(这使得它更复杂等),否则你将无法完成测试,

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

  • 记录问题的原因比抛出AssertionError(或任何其他异常)并且

  • 更复杂
  • 如果您的代码需要在其他应用程序中重复使用(原样),则您对exit的调用可能会出现问题。

答案 6 :(得分:0)

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

java -ea myjar.jar

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