文章目录
1 断言的概念
- 断言机制允许在测试期间向代码中插入一些检查,而在生产代码中会自动删除这些检查。
- 断言是一种测试和调试阶段使用的战术性工具。
- 关键字 assert
2 断言的两种使用形式
assert condition;
//如果条件判断为true,程序继续执行。如果条件判断为false,则抛出 AssertionError异常。
assert condition:expression;
//将表达式传给AssertError对象构造器,并转换成一个消息字符串。
package asserts;
public class Demo01 {
public static void main(String[] args) {
int x = 10;
//断言x 非负数
assert x >= 0;
assert x>=0:x;
}
}
3 启用和禁用断言
- 默认情况下,断言是禁用的。开启命令
-ea
,关闭命令-da
3.1 IDEA 开启/关闭断言
- 开启或关闭断言后,不需要重新编译程序,因为启用或禁用断言是**类加载器(class loader)**的功能。禁用断言时,类加载器会除去断言代码,因此,不会降低程序的运行速度。
- 关闭:将命令删除或改为
-da
3.2 Eclipse开启/关闭断言
- 和IDEA差不多
- 关闭:将命令删除或改为
-da
3.3 命令行开启关闭断言(了解)
-enableassertions
或-ea
选项启用断言-disableassertions
或-da
禁用断言-enablesystemassertions/-esa
开启没有类加载器的系统类
public class Hello{
public static void main(String[] args){
int x = -10;
System.out.println(x);
assert x>0;
assert x>0:x;
System.out.println(x);
}
}
4 什么时候使用断言
- 断言失败是致命的、不可恢复的错误。
- 断言检查只是在开发和测试阶段打开。
- 断言只应该用于测试阶段确定内部错误的位置。
5 类加载器断言状态
java.lang.ClassLoader
* void setDefaultAssertionStatus(boolean b)
为通过类加载器加载的类(没有显示的类或包断言状态)启用或禁用断言
* void setClassAssertionStatus(String className,boolean b)
为给定的类和它的内部类启用或禁用断言
* void setPackageAssertionStatus(Strng packageName,boolean b)
为给定的包及其子包中的所有类启用或禁用断言
* void clearAssertionStatus()
删除所有显示的类和包的断言状态设置,并禁用通过这个类加载器加载的所有类的断言
6 参考资料
《Java 核心技术 卷I》第11版