断言
断言也是程序debug的一种方式,简单理解,就是运行到某一行是,进行断言检测,如果不满足这个条件,则程序终止,并且抛出java.lang.AssertionError异常。
断言在jvm中默认是关闭的,需要添加vm参数-ea 或 -enableassertions
断言表达式
assert boolean {: String}
应用场景
在开发阶段,更新迭代过程中,可以通过断言进行期望测试,并不能替代if,因为断言一旦不成立,则程序会退出,这并不利于WEB项目的生产环境的运行,因此断言并不适合用于生产环境。
如果需要测试,最好还是使用单元测试,如JUnit。
思维误区
if和断言的原理好像差不多,也可以进行逻辑判断,但是这并不能代替if,因为断言不成立将会退出程序
代码展示
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时,并且开启了断言检测
Exception in thread "main" java.lang.AssertionError: please enter a number greater than 100
at 断言.assert_demo.main(assert_demo.java:9)
当输入了11时,并且开启了断言检测
your entered number is 11
your entered number is less then 100
当输入了111时,没有开启断言检测
111
your entered number is 111
your entered number is greater then 100
当输入了11时,没有开启断言检测
your entered number is 11
your entered number is less then 100
当输入了111,开启了断言,但没有断言消息
即:
assert i < 100 ;
Exception in thread "main" java.lang.AssertionError
at 断言.assert_demo.main(assert_demo.java:9)
IDE 的提示

因为断言的存在,这一行的if实际上是没有必要进行判断的,因为只要能运行到这里,那么断言就一定成立。(在-ea参数存在的情况下)
题外话
断言
断言一般不要使用,因为有更好的判断方法,但是如果对于某些必须使用断言的情况下,也不是不能使用,还是要根据需求进行编写代码。
添加vm选项


评论 0
还没有评论,来说点什么吧。