前言
最近看项目代码,发现里面有大量的断言。已经看不懂了,偷偷百度学习一下。
百度搜索 断言:断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真,可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新启用断言。
有点拗口,个人觉得 断言就是在程序员在程序运行前,预估某个变量的值。如果程序在运行时预估值与实际值不相等,则抛出异常提示。那么断言实际上主要是应用在程序调试上(虽然网上很多文章说 在生产上关闭断言是把孩子和洗澡水一起倒掉了)。
动手测试一下 增强记忆。
测试--未开启断言
代码:
public class AssertExample {
public static void main(String args[]) {
int x = 1;
System.out.println("Testing Assertion start");
assert (x == 2);
System.out.println("Testing Assertion passed!");
}
}
运行结果:
因为未开启断言,所以断言不起作用。
Testing Assertion start
Testing Assertion passed!
测试 启动断言
代码同上,运行时设置运行参数,以Eclipse为例
运行结果:
当数值与预估不一直时报出异常:
Exception in thread "main" java.lang.AssertionError
at assertTest.AssertExample.main(AssertExample.java:7)
Testing Assertion start
测试 正确预测
代码:
public class AssertExample {
public static void main(String args[]) {
int x = 1;
System.out.println("Testing Assertion start");
assert (x == 1);
System.out.println("Testing Assertion passed!");
}
}
运行结果:
Testing Assertion start
Testing Assertion passed!
测试 主动报出异常信息
代码:
public class AssertExample {
public static void main(String args[]) {
int x = 1;
System.out.println("Testing Assertion start");
assert x == 2 :"x is error";
System.out.println("Testing Assertion passed!");
}
}
运行结果:
Testing Assertion start
Exception in thread "main" java.lang.AssertionError: x is error
at assertTest.AssertExample.main(AssertExample.java:7)
后记
1.断言尤其适合在一些循环的调试中,当循环值或者变量发送变化后,进行调试。
2.代码中一些常用的字符合法性检查可以交由断言来实现
public static void assertObjectNotNull(String fieldName, Object fieldValue) {
/* if (fieldValue == null) {
throw new IllegalArgumentException(String.format("[%s]不能为空。", fieldName));
}*/
assert(null!=fieldValue):fieldName+"字段不能为空";
}