java assert
和if () {} else exit;
之间有什么区别?
我可以使用if () {} else exit
代替assert
吗?
答案 0 :(得分:8)
有点谷歌吗?
“你应该记住的主要事情是if-else语句应该用于程序流控制,而assert关键字只应该用于测试目的。你永远不应该使用assert来实际执行所需的任何操作您的应用程序正常工作。 根据Sun的官方Java文档:“每个断言都包含一个布尔表达式,您认为在断言执行时它将是真的。” “
答案 1 :(得分:3)
答案 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
这样,您可以在测试应用程序时使用它们,但在其他时候忽略它们。