我们知道C/C++语言中有断言的功能(assert)。在Java SE 1.4版本以后也增加了断言的特性。

断言是为了方便调试程序,并不是发布程序的组成部分。理解这一点是很关键的。

默认情况下,JVM是关闭断言的。因此如果想使用断言调试程序,需要手动打开断言功能。在命令行模式下运行Java程序时可增加参数-enableassertions或者-ea打开断言。可通过-disableassertions或者-da关闭断言(默认情况,可有可无)。

断言的使用:

断言是通过关键字assert来定义的,一般的,它有两种形式。

1. assert <bool expression>;       比如     boolean isStudent = false; assert isStudent;

2. assert <bool expression> : <message>;    比如  boolean isSafe = false;  assert isSafe : "Not Safe at all";

光说无用,举几个简单的例子:

第一种形式:

public class AssertionTest {public static void main(String[] args) {boolean isSafe = false;assert isSafe;System.out.println("断言通过!");}
}

如果是在命令行模式下运行,需要指明开启断言功能。如

java -ea AssertionTest

如果是在IDE下,比如Eclipse,可这样设置: Run as -> Run Configurations -> Arguments -> VM arguments:敲入-ea即可。

输出结果:

Exception in thread "main" java.lang.AssertionErrorat AssertionTest.main(AssertionTest.java:8)

第二种形式:

public class AssertionTest {public static void main(String[] args) {boolean isSafe = false;assert isSafe : "Not safe at all";System.out.println("断言通过!");}
}

输出结果:

Exception in thread "main" java.lang.AssertionError: Not safe at allat AssertionTest.main(AssertionTest.java:7)

第二种形式和第一种的区别在于后者可以指定错误信息。

陷阱:

断言只是为了用来调试程序,切勿将断言写入业务逻辑中。比如考虑下面这个简单的例子:

public class AssertionTest {public static void main(String[] args) {assert ( args.length > 0);System.out.println(args[1]);}
}

该句assert (args.length >0)和if(args.length >0)意思相近,但是如果在发布程序的时候(一般都不会开启断言),所以该句会被忽视,因此会导致以下

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1at AssertionTest.main(AssertionTest.java:7)

更好的替代品:

JUnit。

Java 之 assert (断言)相关推荐

  1. java junit Assert断言用法示例: Assert.assertEquals(期望的结果,运算的结果)

    计算demo /*** 计算器类*/ public class Calculator {/*** 加法* @param a* @param b* @return*/public int add (in ...

  2. 理解和正确使用Java中的断言(assert)

    理解和正确使用Java中的断言(assert) 一.语法形式:     Java2在1.4中新增了一个关键字:assert.在程序开发过程中使用它创建一个断言(assertion),它的 语法形式有如 ...

  3. java assert false_深入剖析Java中的断言assert

    Java陷阱之assert关键字 一.概述 在C和C++语言中都有assert关键,表示断言. 在Java中,同样也有assert关键字,表示断言,用法和含义都差不多. 二.语法 在Java中,ass ...

  4. java中的Assert断言式表达中的assertEquals用法

    1. Assert 断言式的表达方式的用法: List<User> userList = userMapper.selectList(null);Assert.assertEquals(A ...

  5. java assert函数_assert函数-论java中assert函数和Python、PHP、C语言assert函数

    assert函数广泛在java.Python.PHP.C语言中存在,都有统一的意义,用业界语言称之为"断言".最初的出发点都是为了方便调试而设计的,但是最近越来越多的开发者不分测试 ...

  6. Assert断言的使用

    1.Junit测试类使用 2.Assert断言的使用 文章目录 一.简介 1.判断值是否相同(assertEquals) 2.判断值是否不同(assertNotEquals) 3.用Boolean判断 ...

  7. Python assert断言函数及用法

    Python assert断言函数及用法 Python assert 语句,又称断言语句,可以看做是功能缩小版的 if 语句,它用于判断某个表达式的值,如果值为真,则程序可以继续往下执行:反之,Pyt ...

  8. python assert 断言的作用

    python assert 断言句语格式及用法很简单.在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行最崩溃,不如在出现错误条件时就崩溃,这时候就需要assert断言的帮助.本文主要是 ...

  9. Python assert 断言

    assert断言语句用来声明某个条件是真的,其作用是测试一个条件(condition)是否成立,如果不成立,则抛出异常. assert一般用法: assert condition 如果conditio ...

  10. Python assert 断言函数

    使用assert断言是学习python一个非常好的习惯,python assert 断言句语格式及用法很简单.在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行最崩溃,不如在出现错误条件 ...

最新文章

  1. [JAVA EE]Spring Boot 控制层:参数传递方法
  2. 学习ui设计的流程是什么
  3. linux守护实例有什么用,linux中的信号及进程守护的应用实例分享
  4. Science 好文:强化学习之后,机器人学习瓶颈如何突破?
  5. abbyy在使用时提示更改分辨率如何处理
  6. SQL(Oracle)日常使用与不常使用函数的汇总
  7. spring smtp_使用Spring使用Java发送电子邮件– GMail SMTP服务器示例
  8. 带头结点头部插入创建链表
  9. echarts 词云_python Flask+爬虫制作股票查询、历史数据、股评词云网页
  10. linux 磁盘uuid获取
  11. 随笔编号-03 基本类型相互转换集合
  12. 经验原石_行家第一次入手翡翠原石并不是为了一夜暴富
  13. 为什么日本人晚上那么晚去居酒屋吃炸鸡喝啤酒,但街上却鲜有胖子?
  14. java为什么安装怎么慢_Java JDK下载为什么慢? 国内下载站来解决
  15. C语言:编写一个程序,从键盘读入一个矩形的两个边的值(整数),求矩形面积
  16. 6. 卷2(进程间通信)---System V 消息队列
  17. a59s刷机包卡刷 oppo_OPPOA59S刷机包_线刷包_救砖包_官方ROM包_固件包下载- 线刷宝ROM中心...
  18. 微信修改基本配置信息
  19. 2022年分享一些好用的内网穿透软件
  20. php找零页面,JS实现找零张数最小

热门文章

  1. unity获取电磁笔压感_一种智能终端电磁压感笔的制作方法
  2. 登录onedrive显示无法连接服务器,Win10打不开OneDrive提示“连接到onedrive时出现问题”解决方法...
  3. 剑指offer学习--实现单例模式
  4. java PDF 生成方案
  5. Deepdive 教程--数据准备
  6. 创建线程的三种方式、线程运行原理、常见方法、线程状态
  7. Java实现的信号灯
  8. CASIA -HWDB2.0-2.2和OLHWDB2.0-2.2数据集解析
  9. 一如昨日的时光,一如昨日的酒--
  10. CardView属性app:cardUseCompatPadding和app:cardPreventCornerOverlap