【发布时间】:2015-06-01 02:16:25
【问题描述】:
如果这是一个愚蠢的问题,请原谅我,但据我所知,所有 Java 异常都必须被捕获和处理。 例如,这样的事情会产生编译器错误:
public String foo(Object o) {
if (o instanceof Boolean) {
throw new Exception();
}
return o.toString();
}
因为foo() 方法没有添加throws 子句。
但是,此示例可以工作(除非方法 foo() 没有 throws 子句或方法 bar() 没有在 foo() 块中使用 foo()):
public String foo(Object o) throws Exception {
if (o instanceof Boolean) {
throw new Exception();
}
return o.toString();
}
public void bar(Object o) {
try {
String s = foo(o);
}
catch (Exception e) {
//...
}
//...
}
最后,有时 Java 程序有时仍会由于未处理异常而崩溃。
这是怎么发生的?
【问题讨论】:
-
它们并不总是被捕获和处理。这就是问题所在。
-
所有checked expressions ...
-
提供您的堆栈跟踪,以便我们查看异常是什么。
-
还有
Throwable对象不是Exception对象。因此,您的 catch 块会错过它们。见this question。 -
您的 JVM 本身也可能由于 JNI 代码中的错误或错误而崩溃。
标签: java exception exception-handling