在 Java 中,assert(断言) 是一种用于调试和测试阶段的机制,用来检查程序中的假设条件是否成立。如果条件不成立,程序会抛出 AssertionError,帮助开发者尽早发现逻辑错误。
✅ 在开发阶段验证程序内部逻辑是否正确
✅ 用于捕捉“不应该发生”的情况
❌ 不适合用于生产环境的业务逻辑校验
assert condition;
如果 condition 为 false,抛出 AssertionError
assert condition : "错误信息";
异常信息会作为 AssertionError 的 detail message。
public class AssertDemo {
public static void main(String[] args) {
int age = -5;
assert age >= 0; // 年龄不应为负数
System.out.println("年龄是:" + age);
}
}
如果断言开启,运行时会抛出:
Exception in thread "main" java.lang.AssertionError
assert age >= 0 : "年龄不能为负数,当前 age=" + age;
在 Java 中:
assert 默认不会生效
必须在运行时显式开启:
java -ea AssertDemo
或:
java -enableassertions AssertDemo
java -da AssertDemo
✅ 方法内部的前置条件(非 public 方法)
void process(int value) {
assert value > 0 : "value must be positive";
}
✅ 检查不可能发生的情况
switch (type) {
case 1: break;
case 2: break;
default:
assert false : "未知类型";
}
✅ 调试阶段验证逻辑
❌ 不要用 assert 做参数校验(尤其是 public 方法)
// 错误示例
public void setAge(int age) {
assert age > 0; // 如果断言关闭,等于没校验
}
✅ 正确做法:
public void setAge(int age) {
if (age <= 0) {
throw new IllegalArgumentException("年龄必须大于0");
}
}
| 对比项 | assert | 异常(Exception) |
|---|---|---|
| 目的 | 调试、验证逻辑 | 正常错误处理 |
| 是否可恢复 | 否 | 可恢复 |
| 是否适合生产环境 | ❌ 不适合 | ✅ 适合 |
| 是否默认开启 | ❌ 否 | ✅ 是 |
assert 是用来“证明程序是对的”,而不是用来“处理程序可能出错的情况”。
如果你愿意,我也可以帮你对比 JUnit 的 assert 和 Java 原生 assert 的区别,或者讲讲在大型项目中的最佳实践。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。