您的位置:首页 > 编程语言 > Java开发

java之断言assert

2016-11-13 11:26 357 查看
从JDK1.4版本开始,Java语言引入了断言(assert)机制。目的:程序调试

测试代码或者调试程序时,总会做出一些假设,断言就是用于在代码中捕捉这些假设

表现形式:断言就是程序中的一条语句,它对一个boolean表达式进行检查

一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态,系统给出警告或退出

如果没有断言机制,Java程序通常使用if-else或switch语句进行变量状态检查。

缺点:

由于检查的数据类型不完全相同,这样的语句形式不会统一。

因为检查仅仅是应用在测试阶段,而if-else或switch语句在发布以后仍然将起作用,如果消除这些代码就意味着要注释或者删除这些代码,如果这些代码量很大就意味着工作很繁重并存在风险。

使用断言的优点

Java程序员用统一的方式处理状态检查问题;

断言只需在发行的时候关闭该功能即可。

断言的开启和关闭

在默认情况下断言是关闭的,因此在使用断言以前,需要先开启断言功能,方法:

java –ea MyClass                          或者

java –enableassertions MyClass

关闭断言功能的方法:

java –da MyClass                           或者

java –disableassertions MyClass

注意:断言检查通常在开发和测试时开启。为了提高性能,在软件发布后,断言检查通常是关闭的

断言的使用

  Java中使用关键字assert标记断言,语法格式为:

assert Expression1

执行到assert语句时,如果Expression1的值为true,则程序正常执行,如果值为false,该语句创建一个Assertion Error对象,并抛出该对象。

assert Expression1:Expression2

断言失败时,系统会自动将Expression2的值传递给新建的AssertionError对象,进而将其转换为一个消息字符串保存起来,可以获得更多、更有针对性的检查失败细节信息。 

什么时候使用断言

通常来说,断言用于检查一些关键的值,并且这些值对整个程序,或者局部功能的完成有很大的影响。

断言表达式应该短小、易懂,如果需要评估复杂的表达式,应该使用函数计算。

使用断言的情况

检查控制流:在if-else和switch语句中,可以在不应该发生的控制支流上加上assert语句。如果这种情况发生了,assert能够检查出来。

在私有方法计算前,检查输入参数是否有效

对于一些private的方法,要求输入满足一些特定的条件,可以在方法开头使用assert进行参数检查;对于公共方法,通常不使用断言检查

在方法计算后,检查方法结果是否有效

检查程序不变量

private boolean isBalance() {

      ……



//

assert isBalance():"balance is destoried";
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: