Java assert
和 if () {} 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
这样,您可以在测试应用程序时使用它们,但在其他时间忽略它们。