在 Java 中,Assert(断言) 是一种用于调试和测试阶段的机制,用来检查程序中的某个条件是否一定为真。如果条件为假,程序会抛出 AssertionError,帮助开发者尽早发现逻辑错误。
断言的基本思想是:
“我认为这个条件一定是成立的,如果不成立,说明程序有严重问题。”
它不是用来处理正常的业务异常,而是用来捕捉不应该发生的错误。
assert condition;
或
assert condition : message;
int age = -1;
assert age >= 0 : "年龄不能为负数";
age >= 0 为 true,程序正常执行false,抛出:java.lang.AssertionError: 年龄不能为负数
⚠️ 非常重要:Java 的断言默认是关闭的
必须在运行时显式开启:
java -ea MyProgram
或
java -enableassertions MyProgram
关闭断言:
java -da MyProgram
✅ 适合:
例如:
void process(int value) {
assert value != 0 : "value 不应该为 0";
// 后续逻辑
}
❌ 不适合:
用户输入校验
// 错误示例
assert age > 0; // 用户输入可能非法
控制程序流程
生产环境关键判断
✅ 正确做法应使用异常:
if (age <= 0) {
throw new IllegalArgumentException("年龄必须大于 0");
}
| 对比项 | Assert | Exception |
|---|---|---|
| 目的 | 调试、内部假设 | 处理可预见的错误 |
| 是否默认开启 | 否 | 是 |
| 是否用于生产 | 不推荐 | 推荐 |
| 错误类型 | AssertionError | Exception |
Java 的 Assert 是用于调试的“假设检验工具”,不是用来处理业务错误的。
如果你愿意,我也可以帮你对比 JUnit 的 assertTrue / assertThat 和 assert 的区别。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。