Java断言机制

断言概述:

J2SE 1.4 在语言上提供了一个新特性,就是 assertion 功能,他是该版本在 Java 语言方面最大的革新。从理论上来说,通过 assertion 方式可以证明程序的正确性,但是这是一项相当复杂的工作,目前还没有太多的时间意义。

在实现中,assertion 就是在程序中的一条语句,它对一个 boolean 表达式进行检查,一个正确程序必须保证这个 boolean 表达式的值为 true;如果该值为 false,说明程序已经处于不正确的状态下,系统将给出警告或退出。

一般来说,assertion 用于保证程序最基本、关键的正确性。assertion 检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion 检查通常是关闭的。

编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设。

程序员相信在程序中的某个特定点该表达式值为真,可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新启用断言。

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

除了类型检查和单元测试外,断言还提供了一种确定各种特性是否在程序中得到维护的极好的方法。使用断言使我们向按契约式设计更近了一步。

断言主要使用在代码开发和测试时期,用于对某些关键数据的判断,如果这个关键数据不是你程序所预期的数据,程序就提出警告或退出。

简而言之,断言就是一个帮助程序员来简化入参检测代码的工具类

常见的断言特性:

  • 前置条件断言:代码执行之前必须具备的特性。
  • 后置条件断言:代码执行之后必须具备的特性。
  • 前后不变断言:代码执行前后不能变化的特性。

断言使用格式:

断言可以有两种形式:

assert <布尔表达式> 
assert <布尔表达式> : <错误信息>

使用第一种格式,当布尔类型表达式为 false 时,抛出 AssertionError 异常;如果是第二种格式,则输出错误消息。

何时需要使用断言:

  1. 可以在预计正常情况下程序不会到达的地方放置断言:assert false。
  2. 断言可以用于检查传递给私有方法的参数(对于公有方法,因为是提供给外部的接口,所以必须在方法中有相应的参数检验才能保证代码的健壮性)。
  3. 使用断言测试方法执行的前置条件和后置条件。
  4. 使用断言检查类的不变状态,确保任何情况下,某个变量的状态必须满足(如 age 属性应大于 0 小于某个合适值)。

什么地方不要使用断言:

断言语句不是永远会执行,可以屏蔽也可以启用,因此:

  1. 不要使用断言作为公共方法的参数检查,公共方法的参数永远都要执行。
  2. 断言语句不可以有任何边界效应,不要使用断言语句去修改变量和改变方法的返回值。

参考:

https://www.cnblogs.com/cookiewu/p/10196701.html

https://www.cnblogs.com/qishanmozi/p/9810337.html

原文地址:https://www.cnblogs.com/thetree/p/13606460.html