编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式。断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真。可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言,而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新启用断言。
使用断言可以创建更稳定、品质更好且 不易于出错的代码。当需要在一个值为FALSE时中断当前操作的话,可以使用断言。单元测试必须使用断言(Junit/JunitX)。除了类型检查和单元测试外,断言还提供了一种确定各种特性是否在程序中得到维护的极好的方法。使用断言使我们向按契约式设计更近了一步。
- 相当于一个if ()语句,如果满足断言的执行程序,如果不满足则抛错误
- assert需要自行开启,jvm断言默认是关闭的
- assert不具有继承性,父类禁止断言,子类可以开启断言
- 语法:assert 直接加语句,但结果一定要是boolean类型
如何判断断言是否开启
public static void main(String[] args) {
boolean startAssert = false;
//如果开启断言就会执行以下语句
//则startAssert就会变为true;
assert startAssert = true;
System.out.println(startAssert);
}
开启断言
添加-ea,
成功开启断言,然后在运行,输出结果就会返回true
用于判断结果是否正确,如果错误,则会报异常
boolean isRight = 1 > 2;
assert isRight; ///返回false则会报错,如果为true则继续执行程序
System.out.println(isRight);
也可以自定义抛出错误(是错误,不是异常)
boolean isRight = 1 > 2;
assert isRight:"发生错误";
System.out.println(isRight);
Exception in thread "main" java.lang.AssertionError: 发生异常
at demo1.Demo.main(Demo.java:13)
下面附上断言的使用范围
设置断言的使用范围
-ea java -ea 打开所有用户类的assertion
-da java -da 关闭所有用户类的assertion
-ea:<classname> java -ea:MyClass1 打开MyClass1的assertion
-da:<classname> java -da: MyClass1 关闭MyClass1的assertion
-ea:<packagename> java -ea:pkg1 打开pkg1包的assertion
-da:<packagename> java -da:pkg1 关闭pkg1包的assertion
-ea:... java -ea:... 打开缺省包(无名包)的assertion
-da:... java -da:... 关闭缺省包(无名包)的assertion
-ea:<packagename>... java -ea:pkg1... 打开pkg1包和其子包的assertion
-da:<packagename>... java -da:pkg1... 关闭pkg1包和其子包的assertion
-esa java -esa 打开系统类的assertion
-dsa java -dsa 关闭系统类的assertion