在 Java 里,异常不能被“真正忽略”,但可以在代码层面选择不处理、不抛出、或吞掉,这取决于异常类型和写法。
下面分情况说明:
不能无声无息忽略
例如:
FileInputStream fis = new FileInputStream("a.txt");
如果 FileInputStream 可能抛 IOException(受检异常),你必须二选一:
try {
FileInputStream fis = new FileInputStream("a.txt");
} catch (IOException e) {
// 这里就算不写逻辑,也是“处理”了
}
public void test() throws IOException {
FileInputStream fis = new FileInputStream("a.txt");
}
❌ 不能什么都不写,编译器不允许。
可以不处理(语法上允许)
例如:
int a = 1 / 0; // 可能抛 ArithmeticException
你可以:
JVM 会直接把异常往上抛,最终可能导致程序崩溃。
✅ 这是“语法上忽略”,但不是推荐做法
try {
doSomething();
} catch (Exception e) {
// 什么都不做
}
⚠️ 问题:
catch (Exception e) {
// 只记录日志,不中断
log.error("error", e);
}
这是工程上常见做法,但不是“忽略异常本身”。
try {
throw new RuntimeException("A");
} finally {
throw new RuntimeException("B");
}
最终抛出的是 B,A 被忽略(也很难看到)。
⚠️ 这是隐式忽略异常的一种坑。
Java 异常不能被真正忽略,只能选择“处理、抛出、或吞掉”。
Checked 异常必须处理或声明,RuntimeException 可语法忽略但不建议。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。