学习的过程中,遇到了这么一题:什么时候用assert?
看到这个题目,我的内心是崩溃的,大呼:臣妾做不到呀!什么是assert都不知道,还问我什么时候用?就在那一刹那,我怀疑起了人生与理想,难道我的知识面这么窄吗?痛定思痛,虚心学习!查找资料,弄清楚这个小点。
1、assertion(断言)是jdk1.4才开始支持的新功能,主要在开发和测试时开启,默认情况下是禁用的。
2、断言是一个包含布尔表达式的语句,在执行这个语句时,假定该表达式为true,如果表达式计算为false,那么系统会报告一个Assertionerror。
3、断言可以用以下两种形式:
assert Expression1;
assert Expression1 :Expression2;
Expression1应该总是产生一个布尔值,Expression2可以是一个值得任意表达式,这个值用于生成显示更多调试信息的String消息。
4、断言在默认情况下是禁用的,要在编译时启用断言,需要使用source1.4标记:javac-source1.4Test.java
要在运行时启用断言,可使用-enableassertions或者-ea标记。
要在运行时选择禁用断言,可使用-da或者-disableassertions标记。
要在系统类中启用断言,可使用-esa或者-dsa标记,还可以在包的基础上启用或者禁用断言。
5、关于assert使用的范围
1)不要将其用在去判断public方法的参数,如下
public void f1(int x) { assert x > 0; .... }
2)也不要将其用来去直接判断方法的返回值,如下
public boolean f1(int x) {return true;} public void f2(int y) {assert f1()}
这种情况下,如过assertion为disabled,则f2中的f1()不会执行,此时可以用下面的方法
public void f2() { boolean flag = f1(); assert flag; ... }
参考链接:
http://blog.csdn.net/hyp3353/article/details/4222561
http://lavasoft.blog.51cto.com/62575/43735
http://blog.sina.com.cn/s/blog_95feae0d0101hhcg.html