今天在写代码时看到idea有个assert的提示,好奇心驱使之下对它一探究竟,跟着一条一块看看吧
?
assert() 的用法像是一种"契约式编程",在我的理解中,其表达的意思就是,程序在我的假设条件下,能够正常良好的运作。
其实就相当于一个 if 语句:?
if(假设成立)
{
程序正常运行;
}
else
{
报错&&终止程序!(避免由程序运行引起更大的错误)
}
但是这样写的话,就会有无数个 if 语句,甚至会出现,一个 if 语句的括号从文件头到文件尾。并且大多数情况下,我们要进行验证的假设,只是属于偶然性事件,又或者我们仅仅想测试一下,一些最坏情况是否发生,所以这里有了 assert()。
assert 的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向 stderr 打印一条出错信息,然后通过调用 abort 来终止程序运行。
使用 assert 的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。
在函数开始处检验传入参数的合法性
int resetBufferSize(int nNewSize)
{
//功能:改变缓冲区大小,
//参数:nNewSize 缓冲区新长度
//返回值:缓冲区当前长度
//说明:保持原信息内容不变 nNewSize<=0表示清除缓冲区
assert(nNewSize >= 0);
assert(nNewSize <= MAX_BUFFER_SIZE);
...
}
public?class?AssertFoo {
????public?static?void?main(String args[]) {
????????//断言1结果为true,则继续往下执行
????????assert?true;
????????System.out.println("断言1没有问题,Go!");
????????System.out.println("\n-----------------\n");
????????//断言2结果为false,程序终止
????????assert?false?:?"断言失败,此表达式的信息将会在抛出异常的时候输出!";
????????System.out.println("断言2没有问题,Go!");
????}
}