有关断言的学习

断言的使用

断言使程序具有自我保护能力。
假设确信某个属性符合要求,并且代码的执行需要依赖于这个属性。这种情况下,我们一般希望进行检查,或者抛出一个异常,但是如果这样写,这段代码会一直保留在程序中,即使测试完毕也不会自动地删除。如果在程序中含有大量的这种检查,那么程序会运行的相当慢。
因此我们使用断言机制。断言机制允许在测试期间向代码中插入一些检查语句。当代码发布时,这些插入的检测语句会被自动地移走。
这里引入了关键字assert。一般有两种形式:
assert 条件; 或者assert 条件:表达式;
例如:

assert x >= 0;

assert x >= 0 : x ;//将x的实际值传递给了AssertionError对象 
   这两种形式都会对条件进行检测,如果结果为false,则抛出一个AssertionError异常。而在后者形式中,表达式会被传入AssertionError的构造器,并且转换成一个消息字符串。但需要注意的是,AssertionError对象并不存储表达式的值,因此不可能在之后得到使用它的值。

使用断言可以完成参数检查。
众所周知,java语言中给出了三种处理系统错误的机制:
抛出一个异常
日志
使用断言

抛出异常十分熟悉了,我就不介绍了。对于断言来说,在进行选择时,需要注意,断言失败是致命的、不可恢复的错误,而且断言检查只应用于开发和测试阶段。因此,不应该使用代言向程序的其他部分通告发生了可恢复性错误,或者,不应该作为程序向用户通告问题的手段。断言仅仅应当用于测试阶段确定程序内部的错误位置。而日志记录(API)则是一种在程序整个生命周期都可以使用的策略性工具,帮助程序员观察程序运行的操作过程,且开销很小。

使用断言的情况例如:

if(i % 3 == 0)
   ...
else if(i % 3 ==1)
   ...
else //(i % 3 == 2)
...

但这样编写代码容易出现错误。i % 3可能产生余数为负的结果,因此在if语句之前先使用断言。
改变后的代码如下:

assert i >= 0;
if(i % 3 == 0)
   ...
else if(i % 3 ==1)
   ...
else {
   assert i % 3 == 2;
   ...
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值