在 Java 中,断言(assert) 是一种用于调试和开发阶段检查程序内部假设是否正确的机制。它的核心作用是:在“不该发生的情况”发生时,尽早暴露问题。
目的:
在开发和测试阶段,验证程序运行时的某些“前提条件”或“不变条件”是否成立。
如果断言失败,会抛出 AssertionError,程序通常会直接终止(或交由上层处理)。
assert 布尔表达式;
// 或者带提示信息
assert 布尔表达式 : "错误信息";
int age = -1;
assert age >= 0 : "年龄不能为负数";
如果 age < 0,会抛出:
java.lang.AssertionError: 年龄不能为负数
switch (type) {
case A: ...
case B: ...
default:
assert false : "未知类型: " + type;
}
public void setScore(int score) {
assert score >= 0 && score <= 100;
this.score = score;
}
result = compute();
assert result != null;
assert list.size() >= 0;
Java 的断言默认不生效,必须显式开启:
java -ea MyApp
# 或
java -enableassertions MyApp
否则:
assert false; // 不会抛异常
❌ 错误用法:
assert user != null; // 如果断言关闭,这里不会校验
✅ 正确做法:
if (user == null) {
throw new IllegalArgumentException("user 不能为空");
}
| 场景 | 使用 |
|---|---|
| 用户输入错误 | 异常 |
| 程序内部逻辑错误 | assert |
| 生产环境防护 | 异常 |
✅ 适合:
❌ 不适合:
Java 的 assert 是用于“调试时验证程序假设”的工具,不是业务校验手段,也不是异常处理机制。
如果你愿意,我也可以对比 assert 和 JUnit Assert、Objects.requireNonNull 的区别。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。