Assert(断言)和异常(Exception)在编程中都与“出错处理”有关,但设计目的、使用场景和行为完全不同。下面从多个维度对比说明。
assert x > 0 : "x 必须大于 0";
如果断言失败,通常直接终止程序。
if (file == null) {
throw new FileNotFoundException("文件不存在");
}
异常可以被 捕获、处理、恢复。
| 场景 | 用 Assert | 用 Exception |
|---|---|---|
| 参数非法(外部输入) | ❌ | ✅ |
| 程序内部逻辑约束 | ✅ | ❌ |
| 文件不存在 | ❌ | ✅ |
| 数组下标不可能越界 | ✅ | ❌ |
| 用户输入错误 | ❌ | ✅ |
| 调试阶段辅助验证 | ✅ | ❌ |
-ea 开启java -ea Main
void process(int value) {
assert value > 0 : "value 必须为正";
// 后续逻辑
}
✅ 前提:value 一定 > 0
❌ 如果不是,说明程序写错了
void process(int value) {
if (value <= 0) {
throw new IllegalArgumentException("value 必须为正");
}
}
✅ 这是可预期的输入错误
| 类型 | 是否捕获 |
|---|---|
| Assert | ❌ 不捕获 |
| Exception | ✅ 可捕获 |
try {
// 可能抛异常
} catch (Exception e) {
// 处理
}
断言失败通常不应该被捕获。
Assert 是“程序员对程序说的承诺”
Exception 是“程序对运行环境说的应对”
如果你愿意,我也可以结合 Java / Python / C++ 的具体实现再详细讲,或者给你一个“该用哪个”的判断流程图。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。