assert断言
assert 断言
断言检查“按程序设计本应永远成立”的内部条件。失败时抛出 AssertionError,通常代表程序员错误。
语法
assert condition;
assert condition : detailMessage;double average(int total, int count) {
assert count > 0 : "count must be positive: " + count;
return (double) total / count;
}启用
JVM 默认关闭断言:
代码块收起展开
java -ea Main
java -enableassertions Main
java -da Main也可以按包或类启用:
代码块收起展开
java -ea:com.example... Main
java -ea:com.example.Service Main适合场景
- 私有方法的内部不变量。
- 理论上不可到达的分支。
- 算法中间状态。
- 测试和调试阶段尽早暴露缺陷。
不适合场景
断言可能被禁用,所以不能承担必要业务逻辑:
- 不用于公开方法参数校验,应抛 IllegalArgumentException 等异常。
- 不用于用户输入、网络数据、配置或数据库数据。
- 不用于权限与安全检查。
- 表达式中不要放写文件、扣款、删除等副作用。
代码块收起展开
// 错误:关闭断言后 remove 不执行
assert list.remove(value);
boolean removed = list.remove(value);
assert removed : "value should exist";JUnit 的 assertEquals、assertThrows 等不受 JVM -ea 开关影响,单元测试应使用测试框架断言。