在 Java 里,assert 断言默认是关闭的,而且它更多是“防御性检查”而不是常规调试工具。下面从「怎么用」「怎么调试」「常见问题」三个角度说清楚。
assert condition;
// 或
assert condition : "错误信息";
示例:
int age = -1;
assert age >= 0 : "年龄不能为负数";
如果 assert 开启且条件为 false,会抛出:
java.lang.AssertionError: 年龄不能为负数
java -ea MyApp
# 或
java -enableassertions MyApp
只对某个包开启:
java -ea:com.example... MyApp
关闭:
java -da MyApp
✅ IDE 里调试时如果断言不生效,90% 是因为没开 -ea
Run / Debug Configurations
→ VM options
→ 添加:
-ea
Eclipse:
Run Configurations
→ Arguments
→ VM arguments
→ 添加:
-ea
开启 -ea 后:
AssertionError这是最简单有效的调试方式
assert list != null : "list 不能为 null";
如果断言失败:
list 为什么是 nullif (list == null) {
throw new IllegalStateException("list 为 null,调试用");
}
调试完再改回 assert
❌ 不要用 assert 做参数校验(生产环境可能关掉)
// 不推荐
assert param != null;
✅ 正确做法:
if (param == null) {
throw new IllegalArgumentException("param 不能为 null");
}
✅ assert 适合:
| 问题 | 原因 |
|---|---|
| 断言没反应 | 没加 -ea |
| 生产环境没效果 | assert 默认关闭 |
| 断言里有副作用 | ❌ 错误用法 |
| 用 assert 做业务校验 | ❌ 不安全 |
Java assert 调试 = 开启
-ea+ IDE 断点 + 看 AssertionError 堆栈
如果你愿意,可以告诉我:
我可以给你更具体的配置示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。