在 Java 中,断言(assert)是一种用于在开发和测试阶段检查程序内部假设是否正确的机制,主要作用是帮助发现和定位错误。
assert 的作用是:
在程序中声明“某个条件一定为真”,如果不为真,就抛出异常,提醒开发者程序逻辑出错。
示例:
assert x > 0 : "x 必须大于 0";
x > 0 为 true:程序继续执行x > 0 为 false:抛出 AssertionError适合用来验证程序逻辑正确性,而不是用户输入。
int index = calculateIndex();
assert index >= 0 && index < list.size() : "索引越界";
public void setAge(int age) {
assert age >= 0 : "年龄不能为负";
this.age = age;
}
比 System.out.println 更规范、可统一关闭。
默认情况下,Java 不会执行断言。
启用方式:
java -ea MyProgram
# 或
java -enableassertions MyProgram
关闭:
java -da MyProgram
⚠️ 如果没加
-ea,assert等于“不存在”
❌ 不要用于参数校验(面向用户)
// 不推荐
public void login(String user) {
assert user != null;
}
原因:
✅ 正确方式:
if (user == null) {
throw new IllegalArgumentException("用户名不能为空");
}
| 对比项 | assert | 异常(Exception) |
|---|---|---|
| 用途 | 内部逻辑检查 | 业务流程错误处理 |
| 是否可关闭 | ✅ 可以 | ❌ 不行 |
| 生产环境 | 通常关闭 | 必须存在 |
| 面向对象 | 开发者 | 用户 / 调用者 |
Java 的 assert 是用于“开发期防御性编程”的工具,用来捕获“本不该发生”的逻辑错误,而不是处理正常的业务异常。
如果你愿意,我也可以对比 JUnit 的 assertTrue 或 Spring 的 Assert 工具类 的区别。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。