我正在参与掘金创作者训练营第4期,点击了解活动详情,一起学习吧!
前言
说到 Java 的断言,我第一次听到这个名词的时候,还是在上大学的测试课,老师第一堂课就让我们学习了断言assert
,然而因为那个老师是教安卓的,我忘记有没有使用断言框架了,反正那时用着没感觉它是 Java 的东西,后面又很少接触测试的东西,就几乎没有碰过断言assert
了。
那么为什么现在我会写关于断言assert
的内容呢?
我当然不是为了水文章啦,肯定是为了学习 Java 的冷门小知识!
接下来,我从以下四个方面来介绍assert
:
- 什么是断言
- 断言的使用场景
- 如何开启断言
- 断言如何使用
第一点简单介绍一下断言,后面三个点则是分别从使用场景、断言的开启、断言的使用这三个方面更加详细地介绍断言。
什么是断言
Java 是从 JDK1.4 开始支持断言的,主要用于程序代码的调试或测试阶段,千万不能用在正式环境上。当然啦,JVM是默认关闭断言的,想要开启断言还得向 JVM 输入一个参数-enableassertions
才可以启用断言,这个后面再讲。
基本的使用就是assert condition
,当 condition 为 true,就继续往下运行;当 condition 为 false,就抛出一个错误,程序停止。
断言的使用场景
断言的使用场景比较局限,大部门都是围绕着测试的。
- 限定某段代码中某个变量的合理范围,一旦不符合就抛出错误,需要让程序员再修改代码。表达式结果等同理。
- 代替 if?这个不太靠谱,不可能为了一个 if 去让整个程序停止,直接用卫语句
if(condition){return null;}
最省事。 - 断言只能用在开发和测试阶段,多的使用场景我也写不出来了。
切记,千万不能在正式环境中使用,不过一般情况下我们也接触不到公司的正式服务器,我相信公司也不会给正式服务器的 JVM 开启断言,只需要在自己开发自己的项目时注意就好。
自己做项目的时候用起来还是比较方便,写了就留着也没问题,公司的代码就不一定了,像我们公司就会审查提交的代码,但凡写一点奇奇怪怪的东西都会被问为什么要这么做,多一事不如少一事。
如何开启断言
想要使用断言,就必须得先向 JVM 输入一个参数-enableassertions
,也可以使用缩写-ea
。
若是使用命令行就就直接在命令行后面加上就可以了。
命令行
例如:java -ea org.example.simulate.idea.AssertTest
这里打印出来的是乱码,我也不知道咋解决,-Dfile.encoding=UTF-8
貌似识别不了,但 IDEA 上可以,相信也很少人会使用命令行来跑代码吧。
IDEA 编辑器
- 打开 Edit Configurations
- 加入参数
-ea -Dfile.encoding=UTF-8
- Apply、OK
让我们启动项目。
打印结果如下。
eclipse 编辑器应该也很少人用,这里不做演示了,我的电脑也没下 eclipse。
断言如何使用
我们需要在assert
关键字后放置一个布尔值(也可以是一个表达式,这个表达式也会变成一个布尔值),当这个布尔值为 true 时,会通过整个断言;当这个布尔值为 false 时,这个断言就会抛出一个错误,这会让整个程序停止。
注意断言抛出的是错误,我们是无法使用 try{}catch(){}
捕捉的。
assert
有两种语法,一种是直接抛出一个错误,另一种是可以抛出一个错误附带我们写的一个字符串作为提示。
assert condition
直接给一个布尔值,让断言抛出一个没有任何提示的错误。
assert false;
assert condition : msg
给出一个布尔值和一个提示信息,让断言抛出一个带有提示信息的错误。
assert false : "这里有bug!";
总结
以上就是断言assert
的全部内容了。
断言是一个可以帮助我们在开发和测试中提示我们那部分的代码有问题的一个关键字,我们在使用断言时需要好好地设置一个表达式,这样,断言才能在我们放松警惕时提示我们“你这代码有问题”。
最后我想问个问题:你会在开发中使用断言吗?