断言2016新编assert函数说明

assert函数  时间:2021-02-26  阅读:()

assert

目录[隐藏]

概述

常见的断言特性

断言使用方式

启用断言

何时需要使用断言

什么地方不要使用断言

C里面的函数

[编辑本段]

概述

Assert -断言

编写代码时我们总是会做出一些假设 断言就是用于在代码中捕捉这些假设可以将断言看作是异常处理的一种高级形式。断言表示为一些布尔表达式程序员相信在程序中的某个特定点该表达式值为真。可以在任何时候启用和禁用断言验证因此可以在测试时启用断言而在部署时禁用断言。 同样程序投入运行后最终用户在遇到问题时可以重新起用断言。

使用断言可以创建更稳定 品质更好且不易于出错的代码。当需要在一个值为FALSE时中断当前操作的话可以使用断言。单元测试必须使用断言Junit/JunitX 。

除了类型检查和单元测试外断言还提供了一种确定各种特性是否在程序中得到维护的极好的方法。

使用断言使我们向按契约式设计更近了一步。

[编辑本段]

常见的断言特性

前置条件断言代码执行之前必须具备的特性

后置条件断言代码执行之后必须具备的特性

前后不变断言代码执行前后不能变化的特性

[编辑本段]

断言使用方式

断言可以有两种形式

1 .assert Expression1

2.assert Expression1 :Expression2

其中Expression1应该总是一个布尔值 Expression2是断言失败时输出的失败消息的字符串。如果Expression1为假则抛出一个AssertionError这是一个错误而不是一个异常也就是说是一个不可控制异常unchecked Exception),AssertionError由于是错误所以可以不捕获但不推荐这样做 因为那样会使你的系统进入不稳定状态。

[编辑本段]

启用断言

断言在默认情况下是关闭的要在编译时启用断言需要使用source1 .4标记既javac source1 .4 Test.java ,在运行时启用断言需要使用-ea参数。要在系统类中启用和禁用断言可以使用-esa和-dsa参数。

例如publ ic class AssertExampleOne{publ ic AssertExampleOne(){}publ ic static void main(String args[]){int x=10;

System.out.println("Testing Assertion that x==100");assert x=100:"Out assertion fai led!";

System.out.println("Test passed!");

}

}

如果编译时未加-source1 .4,则编译通不过

在执行时未加-ea时输出为

Testing Assertion that x==100

Test passedjre忽略了断言的就代码而使用了该参数就会输出为

Testing Assertion that x==100

Exception in thread "main" java. lang.AssertionError: Out assertion fai led!at AssertExampleOne.main(AssertExampleOne.java:6)

断言的副作用

由于程序员的问题断言的使用可能会带来副作用 例如boolean isEnable=false;

//. . .assert isEnable=true;

这个断言的副作用是因为它修改了程序中变量的值并且未抛出错误这样的错误如果不细心的检查是很难发现的。但是同时我们可以根据以上的副作用得到一个有用的特性根据它来测试断言是否打开。publ ic class AssertExampleTwo{publ ic static void main(String args[]){boolean isEnable=false;

//. . .assert isEnable=true;if(isEnable==false){throw new RuntimeException("Assertion shoule be enable!");

}

}

}

[编辑本段]

何时需要使用断言

1 .可以在预计正常情况下程序不会到达的地方放置断言 assert false

2.断言可以用于检查传递给私有方法的参数。 对于公有方法 因为是提供给外部的接口所以必须在方法中有相应的参数检验才能保证代码的健壮性

3.使用断言测试方法执行的前置条件和后置条件

4.使用断言检查类的不变状态确保任何情况下某个变量的状态必须满足。 如age属性应大于0小于某个合适值

[编辑本段]

什么地方不要使用断言

断言语句不是永远会执行可以屏蔽也可以启用

因此

1 .不要使用断言作为公共方法的参数检查 公共方法的参数永远都要执行

2.断言语句不可以有任何边界效应不要使用断言语句去修改变量和改变方法的返回值

[编辑本段]

C里面的函数

函数名: assert

功能:测试一个条件并可能使程序终止

用法: void assert(int test);

程序例:

#include <assert.h>

#include <stdio.h>

#include <stdl ib.h>struct ITEM {int key;int value;

};

/* add item to l ist, make sure l ist is not nul l */void additem(struct ITEM *itemptr) {assert(itemptr != NULL);

/* add item to l ist */

}int main(void)

{additem(NULL);return 0;

}assert()函数用法assert宏的原型定义在<assert.h>中其作用是如果它的条件返回错误则终止程序执行 原型定义

#include <assert.h>void assert( int expression );assert的作用是现计算表达式expression 如果其值为假即为0 那么它先向stderr打印一条出错信息

然后通过调用a b o rt来终止程序运行。

请看下面的程序清单badptr.c

#include <stdio.h>

#include <assert.h>

#include <stdl ib.h>int main( void )

{

FILE *fp;fp = fo pe n( "te st.txt", "w" );//以可写的方式打开一个文件如果不存在就创建一个同名文件assert( f p ); //所以这里不会出错fc lo se( fp );fp = fopen( "noexitfi le.txt", "r" );//以只读的方式打开一个文件如果不存在就打开文件失败

assert( f p ); //所以这里出错fclo se( fp ); //程序永远都执行不到这里来return 0;

}

[root@localhost error_process]# gcc badptr.c

[root@localhost error_process]# ./a.outa.out: badptr.c:14: main: Assertion `fp' fai led.

已放弃

使用assert的缺点是频繁的调用会极大的影响程序的性能增加额外的开销。

在调试结束后可以通过在包含#include <assert.h>的语句之前插入#defineNDEBUG来禁用assert调用示例代码如下

#include <stdio.h>

#define NDEBUG

#include <assert.h>

用法总结与注意事项

1 )在函数开始处检验传入参数的合法性

如:int resetBufferSize(int nNewSize)

{

//功能:改变缓冲区大小,

//参数:nNewSize缓冲区新长度

//返回值:缓冲区当前长度

//说明:保持原信息内容不变nNewSize<=0表示清除缓冲区assert(n NewSize >= 0);assert(nNewSize <= MAX_BUFFER_SIZE);

. . .

}

2)每个assert只检验一个条件,因为同时检验多个条件时,如果断言失败,无法直观的判断是哪个条件失败

不好: assert(nOffset>=0 && nOffset+nSize<=m_nInfomationSize);

好: assert(nOffset >= 0);assert(nOffset+nSize <= m_nInfomationSize);

3)不能使用改变环境的语句,因为assert只在DEBUG个生效,如果这么做,会使用程序在真正运行时遇到问题

错误: assert(i++ < 100)

这是因为如果出错 比如在执行之前i=100,那么这条语句就不会执行那么i++这条命令就没有执行。

正确: assert(i < 100)i++;

4)asse rt和后面的语句应空一行,以形成逻辑和视觉上的一致感

5)有的地方,assert不能代替条件过滤

注意 当对于浮点数

#include<assert.h>

// float pi=3.14;

// assert(p i=3.14); //float pi=3.14f;assert (pi=3. 14f);

---------------------------------------------------------

在switch语句中总是要有default子句来显示信息(Assert)。int number = SomeMethod();switch(number)

{case 1 :

Trace.WriteLine("Case 1 :");break;case 2:

Trace.WriteLine("Case 2:");break;default :

Debug.Assert(false);break;

}

---------------------------------------------------------------范文最新推荐------------------------------------------------------

电力安全月工作总结

[电力安全月工作总结]电力安全月工作总结2011年3月1 日至3月31 日为我公司的安全生产月 **变电站围绕;夯实基储提高素质、树立标杆、争创一流;的主题开展了丰富多彩、形式多样的具体行动通过看板形式宣传安全第一、预防为主的方针通过48+4的学习机会进行安全生产大讨论通过安全活动进行查找本站的隐患的活动电力安全月工作总结。形成了;人人学会安全层层尽责保证安全;的

良好氛围使我站的安全生产工作又上了一个新的台阶。

本站安全生产月活动具体工作如下

1.开展安全月活动宣传工作大家坐在一起讨论活动的主题、学习实施纲要、讨论各个实施阶段的活动安排。深刻反思11.3事故汲取事故教训每人写了一份11.3事故反思并对本站的安全管理、记录报表、规章制度、培训工作、事故隐患每个值班员都谈了自己的看法和建议对站内管理每个人都倾注了最大的热情可见11.3对每一个值班员的触动是刻骨铭心的安全月的必要开展对变电站各项工作的

促进尤其对值班员安全意识、主人翁精神的影响最为深刻。

2.深入开展安全生产大检查活动。在安全生产整顿周活动的基础上结合秋季安全大检查进一步查摆了本站安全生产的隐患特别是各种规章制度的建立、健全、完善和执行情况对现场运行规程从全面、具体和针对性上进行了修订制定全站停电的反事故预案制定低温天气和防冰闪的反事故措施进行现场演练。 当前正处年底收

---------------------------------------------------------------范文最新推荐------------------------------------------------------

关和人员调整后的敏感时期人员思想浮动大而且本站正在进行新母差与新间隔投运的准备工作施工人员多施工人员安全意识和安全防范技能较低是近阶段我站安全运行的一大隐患我们会同工作负责人一起讨论施工过程中的存在和潜在的危害并有针对性地制定防范了措施保证了施工安全的进行。针对人员素质参差不起安全意识高低不同我们制定了《**站考核细则》制定措施,明确职责和

工作程序对任何可能发生的情况做了充分的准备工作。

3.利用交接-班的时间我们查找本站存在的隐患实行分片分区责任到人对查找到的隐患汇总分析能自己解决的我们都及时认真地消除对我站能力不足不能解决的我们纳入工区的职业安全健康体系 由工区负责解决工作总结《电力安全月工作总结》。该报缺陷的上报缺陷该报危害辨识的报危害辨识使站内所有设备、所有

工作、所有危险点在控、可控、能控。

4.对在本月进行的工作、操作等我们编制事故预案如220KV母差保护更换的准备工作和悬垂刷涂工作 除了工区安排跟踪外站内根据人员新调整、新人员对设备不熟悉的现状三班改为两班加强值班力量 保证了各项工作的顺利完成。 为防止意外发生我

们共同讨论制定出了在工作期间母线故障的反事故预案。

5.每个班利用晚饭后的时间讨论检查了我站在遵章守制方面还存在哪些差距现有规程制度能否满足现场规范化、标准化工作需要并在站内宣读并实施了《**站考核细则》按照个人能力分为12大员管理站内事务规定每个值班员必须按照规章制度工作否则就严格

---------------------------------------------------------------范文最新推荐------------------------------------------------------

考核。在个人专业技能与岗位要求存在的差距站内按人所需制订培训计划建立心智加油站和个人提升计划的培训平台进行培训。工作日志、检修记录、安全活动、安全用具记录、缺陷记录等班组记录已

经和工区进行交流完善纪录格式。

6.对全站值班员进行《电力安全工作规程》、本岗位安全职责、工作中的危险点辨识和防范措施及相关专业的规程制度等的培训选派两名值班员参加工区举办的安规比赛锻炼值班员具备工作所要求的

安全生产技能熟知各项工作的危险点及防范措施

7.完善三票管理制度针对本站实际按照运行工区职业安全健康管理体系实施;三票;管理制度 内容完善 ;三票;按照规定执行严格执行倒闸操作;六关;制度操作准备关、接令关、操作票填写关、核对图板关、操作监护关、质量检查关  ;三票;的填写及执行情况良好。 ;三票;管理制度健全制定了;三票;合格评价标准和考核规定 ;三票;合格评价符合标准要求对发现的问题能及时提出改进措施有记录

可查定期对;三票;的执行情况进行统计、分析和考评。

8.重温《沧州供电公司运行管理标准》及运行相关管理规定。完善我站的《综自站的管理规定》并制定措施严格执行。查找五防系统管理和软件缺陷及时上报并请厂家销缺。查找现场防误闭锁装臵的运行情况缺陷及时报告建立起完善解锁钥匙的管理制度严格执行严格执行操作监护制度重新修改操作密码严格密码管理

使操作监护制度的执行从小操作就具备条件。

9.对继电保护及自动装臵进行全面检查核对保护装臵定值与定值

欧路云:美国CUVIP线路10G防御,8折优惠,19元/月起

欧路云新上了美国洛杉矶cera机房的云服务器,具备弹性云特征(可自定义需要的资源配置:E5-2660 V3、内存、硬盘、流量、带宽),直连网络(联通CUVIP线路),KVM虚拟,自带一个IP,支持购买多个IP,10G的DDoS防御。付款方式:PayPal、支付宝、微信、数字货币(BTC USDT LTC ETH)测试IP:23.224.49.126云服务器 全场8折 优惠码:zhujiceping...

DogYun香港BGP月付14.4元主机简单测试

前些天赵容分享过DogYun(狗云)香港BGP线路AMD 5950X经典低价云服务器的信息(点击查看),刚好账户还有点余额够开个最低配,所以手贱尝试下,这些贴上简单测试信息,方便大家参考。官方网站:www.dogyun.com主机配置我搞的是最低款优惠后14.4元/月的,配置单核,512MB内存,10GB硬盘,300GB/50Mbps月流量。基本信息DogYun的VPS主机管理集成在会员中心,包括...

搬瓦工VPS:高端线路,助力企业运营,10Gbps美国 cn2 gia,1Gbps香港cn2 gia,10Gbps日本软银

搬瓦工vps(bandwagonhost)现在面向中国大陆有3条顶级线路:美国 cn2 gia,香港 cn2 gia,日本软银(softbank)。详细带宽是:美国cn2 gia、日本软银,都是2.5Gbps~10Gbps带宽,香港 cn2 gia为1Gbps带宽,搬瓦工是目前为止,全球所有提供这三种带宽的VPS(云服务器)商家里面带宽最大的,成本最高的,没有第二家了! 官方网站:https...

assert函数为你推荐
阿里云系统阿里云系统用起来怎么样支付宝查询余额怎么查询支付宝里的余额拂晓雅阁我对电脑操作不熟悉,想买一本自学的电脑书籍,是电脑入门那一类的,最好还有办公软件应用那一类的吴晓波频道买粉《吴晓波频道》《罗辑思维》《专栏精粹》怎么评价?渗透测试web渗透测试有前途吗公章制作在WOLD里怎样制作公章1433端口怎么去看1433端口开机滚动条电脑开机滚动条要走好几次雅虎天盾我机器上有瑞星杀毒和防火墙 我用雅虎天盾来查杀木马怎样?2012年正月十五农历2012年正月15早上9点多生的!命里缺什么!是什么命相
电信服务器租赁 最便宜的vps 希网动态域名 warez GGC 搬瓦工官网 sugarsync 外国域名 sockscap 丹弗 html空间 免费mysql 谁的qq空间最好看 idc资讯 hinet 中国电信测网速 稳定免费空间 1美金 爱奇艺vip免费领取 789 更多