Loading... # 断言 断言也是程序debug的一种方式,简单理解,就是运行到某一行是,进行断言检测,如果不满足这个条件,则程序终止,并且抛出`java.lang.AssertionError`异常。 断言在jvm中默认是关闭的,需要添加vm参数`-ea` 或 `-enableassertions` ## 断言表达式 ```java assert boolean {: String} ``` ## 应用场景 在开发阶段,更新迭代过程中,可以通过断言进行期望测试,并不能替代`if`,因为断言一旦不成立,则程序会退出,这并不利于WEB项目的生产环境的运行,因此断言并不适合用于生产环境。 如果需要测试,最好还是使用单元测试,如`JUnit`。 ## 思维误区 if和断言的原理好像差不多,也可以进行逻辑判断,但是这并不能代替`if`,**因为断言不成立将会退出程序** # 代码展示 ```java package 断言; import java.util.Scanner; public class assert_demo { public static void main(String args[]) { Scanner scanner = new Scanner(System.in); int i = scanner.nextInt(); assert i < 100 : "please enter a number less than 100"; System.out.println("your entered number is " + i); if (i < 100) { System.out.println("your entered number is less then 100"); } else { System.out.println("your entered number is greater then 100"); } } } ``` # 运行结果 ## 当输入`111`时,并且开启了断言检测 ```java Exception in thread "main" java.lang.AssertionError: please enter a number greater than 100 at 断言.assert_demo.main(assert_demo.java:9) ``` ## 当输入了`11`时,并且开启了断言检测 ```java your entered number is 11 your entered number is less then 100 ``` ## 当输入了`111`时,没有开启断言检测 ```java 111 your entered number is 111 your entered number is greater then 100 ``` ## 当输入了`11`时,没有开启断言检测 ```java your entered number is 11 your entered number is less then 100 ``` ## 当输入了`111`,开启了断言,但没有断言消息 即: ```java assert i < 100 ; ``` ```java Exception in thread "main" java.lang.AssertionError at 断言.assert_demo.main(assert_demo.java:9) ``` # IDE 的提示 ![image.png](https://www.zunmx.top/usr/uploads/2023/08/4136348732.png) 因为断言的存在,这一行的if实际上是没有必要进行判断的,因为只要能运行到这里,那么断言就一定成立。(在`-ea`参数存在的情况下) # 题外话 ## 断言 断言一般不要使用,因为有更好的判断方法,但是如果对于某些必须使用断言的情况下,也不是不能使用,还是要根据需求进行编写代码。 ## 添加vm选项 ![image.png](https://www.zunmx.top/usr/uploads/2023/08/2867537783.png) © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏