7.4 使用断言
7.4.1 断言的概念
断言机制
允许在测试期间像代码中插入一些检查语句.- Java引入了关键字
assert
- assert 条件;
- assert 条件:表达式;
- 这两种形式都会对条件进行检测.如果结果为false,则抛出一个
AssertionError异常
.在第二种形式中,表达式会被传入AssertionError的构造器
,并转换成一个字符串
7.4.2 启用和禁用断言
- 在默认情况下,断言被禁用
- 在启动或禁用断言时不必重新编译程序.
- 启用或禁用断言是
类加载器(class loader)
的功能.当断言被禁用时,类加载器将跳过断言代码 - 在程序运行时使用
-enableassertion
或-ea
启动断言.可以在某个类或整个包中使用断言 - 使用
-disableassertion
或-da
禁用某个特定类或包的断言
7.4.3 使用断言完成参数检查
- Java中的3种处理系统错误的机制:
- 抛出一个异常
- 日志
- 使用断言
- 使用断言的时机:
- 断言失败时致命的、不可回复的错误
- 断言失败只是用于开发和测试阶段
- 不应该使用断言想程序的其他部分通告发生了可恢复性的错误,不应该作为程序向用户通告问题的手段
- 断言只应该用于在测试阶段确定程序内部的错误位置
7.4.4 为文档假设使用断言
API|所在包|描述
:—:|:—:|:—:
void setDefaultAssertionStatus(boolean b)
|java.lang.ClassLoader
|对于通过类加载器加载的所有类来说,如果没有显示地说明类或包的断言状态,就启用或禁用断言
void setClassAssertionStatus(String className,boolean b)
|java.lang.ClassLoader
|对于给定的类和它的内部类,启用或禁用断言
void setPackageAssertionStatus(String packageName boolean b)
|java.lang.ClassLoader
|对于给定包和其子包中的所有类,启用或禁用断言
void clearAssertionStatus()
|java.lang.ClassLoader
|移去所有类和包的显示断言状态设置,并禁用所有通过这个类加载器加载的类的断言