1、assertion(断言)是jdk1.4才开始支持的新功能,主要在开发和测试时开启,为保证性能,在正式发布后通常是关闭。
2、Java中assertion与C中的assertion的区别在于:
1)Java中是使用assert关键字去实现其功能,而C中是使用的类库函数;
2)C中的assertion是在编译时开启,Java中则是在运行时才开启(但是在编译时,一定要在jdk1.4环境下,否则会编译通过不,因为assert是个新的关键字),方式如下:
java -ea AssertTest
3、assert表达式有两种:
1)assert exp1 此时的exp1为一个boolean类型的表达式
当其值为true时,运行通过,如果为false,则会抛出一个相应的AssertionError,注意它可以被catch,也可以不去处理
2)assert exp1 : exp2 此时的exp1同上,而exp2可以为基本类型或一个Object
当exp1的值为true时,同上,且exp2不会被运算;而当exp1的值为false时,将会抛出AssertionError,同时将exp2的结果作为AssertionError构造器中的参数,当使用catch该错误时,可利用getMessage()方法打印出exp2的结果。
4、关于assert使用的范围
1)不要将其用在去判断public方法的参数,如下
2)也不要将其用来去直接判断方法的返回值,如下
这种情况下,如过assertion为disabled,则f2中的f1()不会执行,此时可以用下面的方法
下面是两个关于assert应用的简单例子
编译:javac -d . AssertTest1.java
运行:java -ea AssertTest1
结果为:
in true condition
Exception in thread "main" java.lang.AssertionError
at AssertTest1.assertMe(AssertTest1.java:4)
at AssertTest1.main(AssertTest1.java:14)
运行后结果:
in true condition
Error Occur!
详细参考:http://arthennala.blog.51cto.com/287631/56996