Assertion是用于在开发期间测试自己的些假设,当部属程序时则会被清除。这能够快速和有效地检测与修正程序中的错误。该特性从Java 1.4开始被支持。
一、Assertion语句的两种形式:
1, 一种最简单的形式:assert Expression1;
2, 另一种是: assert Expression1: Expression2;
其中Expression1必须是boolean值,如果Expression1结果ture则程序正常运行,如果为false则出现AssertionError异常;Expression2可以中是能够产生值的任何内容,这个表达式用于生成字符串消息,该消息显示在栈轨迹内,以提供更多的调试信息。
二、示例:
第一种形式:
public class AssertDemo {
public static void main (String[] args) {
int argsLength = args.length;
assert(argsLength > 0);
for (String s : args) {
System.out.println(" > " + s);
}
}
}
编译之后,在运行时需要使用-ea或-enableassertions来启用Assertion,因为Assertion是默认禁用的。
在这个例子中如果使用java -ea AssertDemo则会出现抛出AssertionError异常:
Exception in thread "main" java.lang.AssertionError
at AssertDemo.main(AssertDemo.java:5)
第二种形式:
另外还可以使用第二种方式增加额外的信息:
public class AssertDemo {
public static void main (String[] args) {
int argsLength = args.length;
assert(argsLength > 0): "Arguments expected.";
for (String s : args) {
System.out.println(" > " + s);
}
}
}
再一次编译并使用java -ea AssertDemo 执行后将得到如下信息:
Exception in thread "main" java.lang.AssertionError: Arguments expected.
at AssertDemo.main(AssertDemo.java:5)
注意:这只是一个示例程序,有些情况并不适合使用断言。事实上,该示例就是不适合使用断言的例子
三、适当地使用断言
虽然能够用try/catch来捕获Assertion抛出的异常,但决不能这样做。另外:
1,不要使用断言验证公共方法的参数,因为assert语句不能确保被执行,所以公共方法的任何约束应该由方法自己强制执行。
2,不要使用断言验证命令行参数,与前面一条规则类似,参数的验证应该由程序自己来执行。
3,不要使用可能产生副作用的断言表达式。
四、参考文献
[1]Programming With Assertions, Sun Java Documentation, http://java.sun.com/j2se/1.4.2/docs/guide/lang/assert.html
[2]SCJP学习指南,Kathy sierra & Bert Bates,人民邮电出版社
http://hi.baidu.com/fwso/blog/item/6f4d8802acbe7a0b4bfb51b7.html