在 Java 里,断言(Assert)主要用于开发和测试阶段做“内部逻辑检查”,不建议在生产环境做业务校验。下面从用法、开启方式、适用场景和注意事项给你一个完整说明。
assert 布尔表达式;
示例:
int age = 18;
assert age >= 0;
如果 age < 0,程序会抛出:
AssertionError
assert 布尔表达式 : "错误信息";
示例:
int age = -1;
assert age >= 0 : "年龄不能为负数:" + age;
当断言失败时,错误信息会显示在 AssertionError 中。
⚠️ Java 默认是关闭断言的,不开启不会生效。
java 命令java -ea MyApp
或:
java -enableassertions MyApp
java -ea:com.example... MyApp
java -da MyApp
-ea
public int divide(int a, int b) {
assert b != 0 : "除数不能为 0";
return a / b;
}
✅ 适合你确信调用方不会传错参数的情况
public void process(int status) {
status = update(status);
assert status == 1 || status == 2 : "非法状态:" + status;
}
| 场景 | 推荐方式 |
|---|---|
| 程序内部逻辑错误 | ✅ assert |
| 用户输入错误 | ❌ assert |
| 业务校验 | ❌ assert |
| 可控异常处理 | ✅ if + 异常 |
| 生产环境校验 | ✅ IllegalArgumentException 等 |
public void setAge(int age) {
assert age >= 0;
this.age = age;
}
如果断言没开启,这行代码直接失效。
✅ 正确写法:
public void setAge(int age) {
if (age < 0) {
throw new IllegalArgumentException("年龄不能为负数");
}
this.age = age;
}
assertjava.lang.AssertionError✅ 适合用断言:
❌ 不适合用断言:
断言是给程序员看的,不是给用户看的。
如果你愿意,我也可以帮你对比 JUnit 的 assert 和 Java 原生 assert 的区别,或者给你一个实际项目中的使用建议。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。