javaassert
和 和 有什么不一样if () {} else exit;
?
我可以用if () {} else exit
代替assert
吗?
可能有点谷歌?
" 你应该记住的主要事情是 if-else 语句应该用于程序流控制,而 assert 关键字应该只用于测试目的。你不应该使用断言来实际执行应用程序所需的任何操作正常工作。根据 Sun 的官方 Java 文档:“每个断言都包含一个布尔表达式,当断言执行时,您认为该表达式为真。”“
我可以忽略断言
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 用于控制程序的流程。断言不能用于此!断言只是为了在你的代码中有“检查点”来检查“应该总是”匹配的条件。
运行程序时可以打开或关闭断言,以便您可以在开发机器/集成环境中启用断言并在发布版本中禁用它们。
-ea
只有在命令行启用断言时,assert 关键字才会触发异常。if/else 将始终执行。最重要的是,assert 关键字允许编写不太冗长的代码。比较:
assert parameter != null;
到:
if( parameter != null )
{
}
else
{
}
除非传递了 -ea 参数,否则断言将被忽略:
java -ea myjar.jar
这样,您可以在测试应用程序时使用它们,但在其他时候忽略它们。