在 Java 中,断言(Assert)主要用于开发和测试阶段,用来检查程序中的“不可能为假”的条件。如果断言失败,会抛出 AssertionError。
下面分几种常见用法说明。
assert 关键字assert condition;
或带错误信息:
assert condition : "错误信息";
public class AssertDemo {
public static void main(String[] args) {
int a = 10;
assert a > 0 : "a 必须大于 0";
System.out.println("a = " + a);
}
}
如果 a <= 0,程序会抛出:
Exception in thread "main" java.lang.AssertionError: a 必须大于 0
Java 的断言默认不启用,即使写了 assert 也不会生效。
java -ea AssertDemo
或启用某个包:
java -ea:com.example... AssertDemo
-ea
assert list != null;
assert index >= 0 && index < list.size();
❌ 错误示例:
public void setAge(int age) {
assert age > 0; // 不推荐
}
✅ 正确做法:
public void setAge(int age) {
if (age <= 0) {
throw new IllegalArgumentException("年龄必须大于 0");
}
}
| 对比项 | assert | 异常 |
|---|---|---|
| 是否默认启用 | ❌ 否 | ✅ 是 |
| 是否用于生产 | ❌ 不推荐 | ✅ 推荐 |
| 失败结果 | AssertionError | Exception |
| 使用目的 | 程序内部逻辑保证 | 业务/参数校验 |
如果你是在写单元测试,一般不用 assert,而是用 JUnit 断言。
import static org.junit.jupiter.api.Assertions.*;
@Test
void testAdd() {
assertEquals(3, 1 + 2);
assertTrue(1 > 0);
assertNotNull(new Object());
}
✅ 这是最常用、最推荐的“断言”方式。
Java 的
assert用于开发阶段验证内部逻辑,不适合做参数校验;单元测试请用 JUnit 断言。
如果你愿意,我也可以帮你:
assert vs if + throw免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。