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

java assertif () {} else exit;之间的区别是if () {} else exit;

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

有点谷歌可能吗?

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

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

你可以,断言是专门设计来断言代码的一部分,

如果AssertionError失败,assert将抛出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用于控制程序的流程。 断言一定不能用于此! 断言只是在代码中使用“检查点”来检查“应该始终”匹配的条件。

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

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

 assert parameter != null; 

至:

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

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

是的,你可以,但……

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

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

  • 记录问题的原因比抛出AssertionError (或任何其他exception)更复杂,

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

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

java -ea myjar.jar

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