2021.5.6:断言Assertion
说明
断言(Assertion)是一种调试程序的方式。在Java中,使用assert关键字来实现断言。
例子
public static void main(String[] args) { double x = Math.abs(-123.45); assert x >= 0; System.out.println(x); }
语句assert x>=0;即为断言,
- 断言条件x>=0预期为true。
- 如果计算结果为false,则断言失败,抛出AssertionError。
使用assert语句时,还可以添加一个可选的断言消息:
assert x >= 0 : "x must >= 0";
这样,当断言失败的时候,AssertionError会带上消息x must >= 0,更加便于调试。
Java断言的特点是:断言失败时会抛出AssertionError,导致程序退出结束。因此,断言不能用于可恢复的程序错误,只应该用于开发和测试阶段。
对于可恢复的程序错误,不应该使用断言,而应该用throw主动抛出异常并在上层捕获。
不过JVM默认关闭断言,如果要开启,需要给JVM传递参数-enableassertions(简写为-ea)来启用断言。
还可以有选择地对特定的类启用断言,命令行参数为:-ea:com.itranswarp.sample.Main表示只对com.itranswarp.sample.Main这个类启用断言。如果要对特定的包启用断言,命令行参数为:-ea:com.itranswarp.sample...(注意结尾的3个.),表示对com.itranswarp.sample这个包启动断言。
实际应用中,很少使用断言。更好的方法是编写单元测试,后续的JUnit节中将会学到。