断言概述:

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

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

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

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

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

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

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

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

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

常见的断言特性:

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

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

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

断言使用格式:

断言可以有两种形式:

assert

assert :

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

何时需要使用断言:

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

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

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

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

什么地方不要使用断言:

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

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

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

参考:

java断言是什么_Java断言机制相关推荐

  1. java断言是什么_Java断言

    断言的概念 断言用于证明和测试程序的假设,比如"这里的值大于 5". 断言可以在运行时从代码中完全删除,所以对代码的运行速度没有影响. 断言的使用 断言有两种方法:一种是 asse ...

  2. java断言是什么_Java断言(Assertion)

    断言(Assertion)是Java中一条语句,包含一个布尔表达式,当该布尔值为真,程序则被认为是正确的:当布尔值为假,则系统会抛出错误. 断言默认禁用的,在开发时候可开启功能,有利于纠正错误,增加可 ...

  3. java异常详细讲解_Java异常处理机制的详细讲解和使用技巧

    一起学习 1. 异常机制 1.1 异常机制是指当程序出现错误后,程序如何处理.具体来说,异常机制提供了程序退出的安全通道.当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器. 1.2 ...

  4. java class 生成对象_Java反射机制(创建Class对象的三种方式)

    1:SUN提供的反射机制的类: java.lang.Class java.lang.reflect.Constructor java.lang.reflect.Field java.lang.refl ...

  5. java 反射的弊端_java反射机制的一些学习心得小结

    概述 之前在了解Spring的类加载机制的时候,了解了java的反射机制.但是,我对反射理解一直不深.也一直有点疑惑:Spring为什么利用反射创建对象?直接new对象和依靠反射创建对象有什么区别?什 ...

  6. java 反射执行语句_JAVA反射机制

    JAVA反射机制定义: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的 ...

  7. java 反射data类型_java反射机制系列之初识Java Reflection

    烈火建站学院(LieHuo.Net)JAVA文档 JAVA 反射机制是指Java程序可以在执行期载入,探知,使用编译期间完全未知的classes.这句话可能有点难以理解,我们可以通过一个例子来看.在 ...

  8. java 操作属性值_java反射机制根据属性名获取属性值的操作

    一.考虑安全访问范围内的属性,没有权限访问到的属性不读取 /** * 根据属性名获取属性值 * * @param fieldName * @param object * @return */ priv ...

  9. java反射的优缺点_Java反射机制的优缺点

    这篇文章达内长沙java培训的老师想和大家聊一聊Java反射机制.首先我们先来看看它的定义:Java反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够 ...

最新文章

  1. CSS 解决td里面内容太多把表格弄变形的原因,设置 自动换行。
  2. Word 2003高级技巧之可爱的锚标记
  3. 基于Schema配置的AOP
  4. 鸿蒙手表esim,鸿蒙手表终于来了!或将支持 eSIM,实现独立通话
  5. 惊现飞鸽传书2009
  6. qlv视频转换器免费版_迅捷视频转换器无法转换腾讯视频怎么办?亲测操作快速转换...
  7. 如何对物联网数据进行大数据分析
  8. 每日一道剑指offer-反转链表
  9. mmap()映射硬盘的文件
  10. Eclipse运行慢
  11. android studio高考倒计时,高考倒计时app排行榜
  12. MCS-51单片机的中断系统
  13. vs哪个版本好用_5个版本17款白金爱他美,究竟选哪个?德国版/澳洲版/卓萃/英国.....
  14. memcached安装教程
  15. python模拟登陆GDUFE教学一体化平台
  16. 106短信发送失败的原因
  17. [NOIP2008]笨小猴 T1
  18. python replace 空格数据处理
  19. 壳的编写(2)-- 编写壳(Stub)部分(1)
  20. Java学习之编程入门

热门文章

  1. redis命令之哈希表类型hincrby命令用法详情
  2. 纯css3火箭穿越太空动画js特效
  3. Program type already present: com.***.***.classA“的解决经验
  4. word分页码简化设置
  5. iOS开发——实时监控网速
  6. 用python 实现从fasta文件中获取登记码
  7. 玩转Jetson Nano(一) 开机准备与远程连接设置
  8. matlab保存f黑白图片_【Matlab学习秘籍】文件读写完全版
  9. 单方面论述题-前缀和-小科的神笔详解+代码——伟大的旭哥的博客
  10. IISExpress.无法启动IIS Express Web 服务器.Starting IIS Express... IIS Express is running