在 Java 里,assert 是关键字级别的断言机制(不是 JUnit 的 Assert 类),使用不当很容易踩坑。下面按“常见错误 + 原因 + 正确做法”来说明。
assert x > 0;
运行时什么也没发生,即使 x <= 0。
Java 默认关闭断言,必须在运行时加参数:
java -ea Main
# 或
java -enableassertions Main
-eapublic void setAge(int age) {
assert age > 0;
this.age = age;
}
age 可能是非法的使用异常:
if (age <= 0) {
throw new IllegalArgumentException("age must > 0");
}
✅ 断言只用于“不可能发生的情况”
assert list.remove(0) != null;
boolean removed = list.remove(0);
assert removed;
assert calculate() == 42;
✅ 单元测试用 JUnit / TestNG:
assertEquals(42, calculate());
assert value != null;
assert value != null : "value must not be null, but it is";
✅ 第二个参数是错误信息,便于排查
public void process(String input) {
assert input != null;
}
✅ public 方法用异常,private 方法可用断言
try {
assert false;
} catch (AssertionError e) {
// 忽略
}
✅ 不要 catch AssertionError
assert condition;
if (!condition) {
return;
}
❌ 逻辑冗余且危险
Java 断言只用于“内部逻辑保护”,不是校验工具,也不是测试工具。
如果你愿意,我也可以对比:
assert vs JUnit Assert免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。