在 Java 里,Assert(断言) 和 异常(Exception) 不是“谁更好”的关系,而是用途不同,关键看场景。
-ea 开启)AssertionError✅ 内部逻辑约束
✅ 前置/后置条件(你认为“绝不该错”)
✅ 调试阶段的问题暴露
assert x > 0 : "x 必须大于 0";
❌ 用户输入校验
❌ 文件不存在
❌ 网络异常
❌ 任何“线上必须处理”的情况
try-catch 捕获✅ 参数非法(用户传入)
✅ IO / 网络 / 数据库
✅ 业务规则失败
✅ 任何“线上可能出”的问题
if (age < 0) {
throw new IllegalArgumentException("年龄不能为负");
}
| 对比项 | Assert | Exception |
|---|---|---|
| 是否默认开启 | ❌ 否 | ✅ 是 |
| 是否可恢复 | ❌ 否 | ✅ 是 |
| 使用阶段 | 开发/测试 | 全程 |
| 使用者 | 开发者 | 开发者 + 运行时 |
| 典型用途 | 内部假设 | 错误处理 |
如果你希望“上线后还能拦住错误” → 用异常
如果你只是“开发时帮我发现问题” → 用断言
❌ 用 assert 做参数校验(生产环境直接失效)
❌ 用异常代替断言(正常逻辑频繁抛异常,代码很乱)
断言是“开发者的辅助工具”,异常是“程序的错误处理机制”
正常业务用异常,内部逻辑用断言
如果你有具体场景(比如:参数校验 / 单元测试 / 框架设计),我可以帮你判断该用哪个。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。