在 Java 中,assert 是一种调试期断言机制,用得好可以尽早暴露问题,但用得不规范也容易造成误解或生产问题。下面从语法、使用场景、规范写法、常见坑几个方面说明。
assert condition;
或带错误信息:
assert condition : "错误信息";
示例:
assert list != null;
assert age > 0 : "age must be positive, but was " + age;
⚠️ 注意:
Java 的 assert 默认是关闭的,必须在运行时开启:
java -ea MyApp
# 或
java -enableassertions MyApp
关闭则用:
java -da MyApp
assert x >= 0 && x < size;
private void process(int index) {
assert index >= 0 && index < data.length;
}
Result r = compute();
assert r != null;
default:
assert false : "unreachable code";
// 错误示例
public void setAge(int age) {
assert age > 0;
}
✅ 正确做法:
public void setAge(int age) {
if (age <= 0) {
throw new IllegalArgumentException("age must be > 0");
}
}
原因:assert 可能被关闭,参数校验必须始终生效。
// 错误
assert file.exists();
// 错误
assert list.add(item);
assert condition : "描述信息 + 关键变量";
示例:
assert objects != null : "objects should not be null here";
assert count >= 0 : "count = " + count;
| 场景 | 使用方式 |
|---|---|
| 单元测试 | JUnit Assertions.assertEquals |
| 生产代码调试 | assert |
| 业务校验 | 异常(IllegalArgumentException 等) |
✅ 规范建议
✅ 一句话总结
Assert 是给程序员看的,不是给用户看的;是调试工具,不是业务防护。
如果你愿意,我也可以帮你写一个**“assert vs 异常”对照示例或代码评审清单**。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。