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.对继电保护及自动装臵进行全面检查核对保护装臵定值与定值
npidc全称No Problem Network Co.,Limited(冇問題(香港)科技有限公司,今年4月注册的)正在搞云服务器和独立服务器促销,数据中心有香港、美国、韩国,走CN2+BGP线路无视高峰堵塞,而且不限制流量,支持自定义内存、CPU、硬盘、带宽等,采用金盾+天机+傲盾防御系统拦截CC攻击,非常适合建站等用途。活动链接:https://www.npidc.com/act.html...
桔子数据(徐州铭联信息科技有限公司)成立于2020年,是国内领先的互联网业务平台服务提供商。公司专注为用户提供低价高性能云计算产品,致力于云计算应用的易用性开发,并引导云计算在国内普及。目前公司研发以及运营云服务基础设施服务平台(IaaS),面向全球客户提供基于云计算的IT解决方案与客户服务,拥有丰富的国内BGP、双线高防、香港等优质的IDC资源。 公司一直秉承”以人为本、客户为尊、永...
Hostigger 主机商在前面的文章中也有介绍过几次,这个商家运营时间是有一些年份,只不过在我们圈内好像之前出现的次数不多。最近这段时间商家有提供不限流量的VPS主机,逐渐的慢慢被人认识到。在前面的介绍到他们提供的机房还是比较多的,比如土耳其、美国等。今天看到Hostigger 商家居然改动挺大的,原来蛮好的域名居然这次连带官方域名都更换掉去掉一个G(Hostiger )。估摸着这个域名也是之前...