以前有看过一些C++的东西,但是并不知道是断言,现在学习java就来了解下断言的使用。
断言:指在开发期间使用的、让程序在运行时进行自检的代码(通常是一个子程序或者宏)。
断言为真,表明程序正常运行,否则就意味着发现了代码中意料之外的错误了。所以在越是大的项目当中断言越是有用,程序也能更快的找出错误。
常见的断言特性
前置条件断言:代码执行之前必须具备的特性
后置条件断言:代码执行之后必须具备的特性
前后不变断言:代码执行前后不能变化的特性
断言的使用
一个断言通常含有2个参数:一个描述假设真假的布尔表达式,一个是断言为假的时候需要显示的信息。
1.assert Expression1
2.assert Expression1:Expression2
其中Expression1应该总是一个布尔值,Expression2是断言失败时输出的失败消息的字符串。如果Expression1为假,则抛出一个 AssertionError,这是一个错误,而 不是一个异常,也就是说是一个不可控制异常(unchecked Exception),AssertionError由于是错误,所以可以不捕获,但不推荐这样做,因为那样会使你的系统进入不 稳定状态。
起用断言
断言在默认情况下是关闭的,要在编译时启用断言,需要使用source1.4标记 既javac source1.4 Test.java ,在运行时启用断言需要使用 -ea参数 。要在系统类中启 用和禁用断言可以使用 -esa 和 -dsa参数。
Eclipse启用断言
Run -> Run... -> Arguments菜单项的VM arguments区域,加上断言开启的标志-enableassertions 或者-ea ,然后在debug环境下运行。
一般的断言检查情况:
• 输入参数或输出参数的取值处于预期的范围内;
• 子程序开始(或者结束)执行时文件或流是处于打开(或关闭)的状态;
• 子程序开始(或者结束)执行时,文件或流的读写位置处于开头(或结尾);
• 文件或流已用只读、只写或可读可写方式打开;
• 仅用于输入的变量的值没有被子程序所修改;
• 传入子程序的数组或其他容器至少能容纳X个数据元素;
• 表已初始化,存储着真实的数值;
• 子程序开始(或结束)执行时,某个容器是空的(或满的);
• 一个经过高度优化的复杂子程序的运算结果和相对缓慢但代码清晰的子程序的运算结果相一致;
断言主要是用于开发和维护阶段。而在生成产品代码时,可以不把断言编译进目标代码里去,以免降低系统的性能。
使用断言的指导建议:
1.用错误处理代码来处理预期会发生的状况,用断言来处理绝不应该发生的状况。
2.避免把需要执行的代码放到断言中(很重要)。
3.应该先使用断言再处理错误