java’assert’和’if(){} else之间的区别退出;’
java assert
和if () {} 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
这样,您可以在测试应用程序时使用它们,但在其他时候忽略它们。