在 Java 中,assert 是一种调试和测试阶段使用的断言机制,默认在运行时是关闭的,所以很多人会觉得“assert 没生效 / 不会报错”。下面系统地讲一下 Java Assert 断言怎么用、怎么调试、常见坑。
assert condition;
// 或
assert condition : "错误信息";
示例:
int age = -1;
assert age >= 0 : "年龄不能为负数";
如果 age < 0,且断言已开启,会抛出:
java.lang.AssertionError: 年龄不能为负数
Java 的 assert 不会自动生效,必须在运行时开启。
java -ea MyProgram
或只开启某个包:
java -ea:com.example... MyProgram
IntelliJ IDEA
-ea
Eclipse
-ea
✅ 不开启 -ea,断言永远不执行(像没写一样)
assert list != null : "list 不能为 null";
报错后:
assert debugPrint(x);
static boolean debugPrint(int x) {
System.out.println("x = " + x);
return true;
}
✅ 只在断言开启时打印
@Test
public void test() {
int result = add(2, 3);
assert result == 5;
}
⚠️ 注意:
JUnit 不依赖 assert 开关,但 JUnit 5 推荐用:
assertEquals(5, result);
public void setAge(int age) {
assert age >= 0; // 生产可能不生效
}
✅ 正确方式:
if (age < 0) {
throw new IllegalArgumentException("age < 0");
}
assert list.remove(0) != null; // 危险
断言关闭时,这行代码不会执行
AssertionErrorExceptioncatch (Exception e) 捕获✅ 适合:
❌ 不适合:
Java 的 assert 是用来“调试假设”的,不是用来做错误处理的;
不开启-ea,它就等于不存在。
如果你愿意,可以告诉我:
我可以给你更针对性的调试方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。