简短结论:Java 的 assert 关键字不适合用于生产环境的关键逻辑校验,一般只建议用于开发/测试阶段的内部不变式检查。
下面详细说明。
assert 的机制特点Java 中的 assert 是语言级别的断言:
assert x > 0 : "x must be positive";
关键点:
默认是关闭的
-ea
或-enableassertions
assert 语句完全不会执行失败会抛出 AssertionError
Error,不是 Exception编译后仍可能存在,但运行时不生效
assert,生产环境没开 -ea 就等于“废代码”生产环境通常不会开启 -ea,否则:
AssertionError 导致服务崩溃结果是:
你以为有校验,其实根本没有
例如:
assert userId != null;
如果这是“用户未登录”的业务错误,应该用:
if (userId == null) {
throw new IllegalArgumentException("userId is null");
}
AssertionError 语义不对assert 表示“程序不可能出错”assert 适合用在哪里?✅ 适合:
示例:
assert list.size() == expectedSize : "size mismatch";
❌ 不适合:
Objects.requireNonNull(userId, "userId must not be null");
或使用框架:
Assert.notNull()Validate@NotNull 等)if (amount < 0) {
log.error("invalid amount: {}", amount);
throw new BusinessException("amount invalid");
}
Java 的
assert是“开发者工具”,不是“生产防护网”。
如果你愿意,我也可以帮你区分哪些逻辑该用 assert,哪些该用异常,或者给你一套“生产级参数校验规范”。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。