断言
当程序中使用大量的异常抛出来检查变量的值是否符合规定时,检测所使用的代码会保留在程序中,积累这些测试代码会导致程序越来越慢。
断言机制可以在测试期间向代码中插入检查语句,当代码发布时,这些语句能够自动被移走。
断言的语法形式如下:
// 当条件不成立时抛出AssertionError异常
assert condition;
// 当条件不成立时将表达式传入AssertionError构造器,转换成消息字符串,然后抛出异常
assert condition : expression;
启用和禁用断言
启用或禁用断言时类加载器的功能,不需要重新编译程序,在运行程序时设置选项即可。
java -enableassertions MyApp
当断言被禁用时,类加载器会跳过断言代码,为程序运行节省时间。
也可以在类甚至包中使用断言。
java -ea:MyClass -ea:com.mycompany.mylib... MyApp
也可以选择禁用某个特定类和包的断言。
java -ea:... -da:MyClass MyApp
对于没有类加载器的系统类,使用-enablesystemassertions
或-esa
开关启用断言。
参数检查
对于文档中不抛出异常的参数约定,应当使用断言来判断其符合条件,这种约定称为前置条件。
文档假设
如果使用注释来说明假设的前置条件,应当用断言来代替。这样当违反假设时可以直接抛出异常。