转载 Assert断言知识

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值