Java面试宝典-assert

学习的过程中,遇到了这么一题:什么时候用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;
    ...
}

6、对assert的思考

 
assert既然是为了调试测试程序用,不在正式生产环境下用,那应该考虑更好的测试JUint来代替其做用,JUint相对assert关键的所提供的功能是有过之而无不及。当然完全可以通过IDE debug来进行调试测试。在此看来,assert的前途一片昏暗。
 
因此,应当避免在Java中使用assert关键字,除非哪一天Java默认支持开启-ea的开关,这时候可以考虑。对比一下,assert能给你带来多少好处,多少麻烦,这是我们选择是否使用的的原则。


参考链接:

http://blog.csdn.net/hyp3353/article/details/4222561

http://lavasoft.blog.51cto.com/62575/43735

http://blog.sina.com.cn/s/blog_95feae0d0101hhcg.html


你可能感兴趣的:(Java面试宝典-assert)