请原谅我这是一个愚蠢的问题,但据我所知,必须捕获和处理所有Java异常。 例如,像这样的东西会产生编译器错误:
public String foo(Object o) {
if (o instanceof Boolean) {
throw new Exception();
}
return o.toString();
}
因为方法foo()
没有添加throws
条款
但是,此示例可行(除非方法foo()
没有throws
子句或方法bar()
没有包围foo()
的使用在try/catch
块中:
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程序有时会崩溃。
这是怎么发生的?
答案 0 :(得分:5)
您不必处理所有种类的例外情况。
从java.lang.RuntimeException
或java.lang.Error
继承的例外是所谓的未经检查的例外,可以通过try-catch构造捕获,但他们不必但是,不过。
正如您在java.lang.Error
的API文档中所看到的,它不会从java.lang.Exception
继承。出于这个原因,它不会被你的try-catch块捕获 - 你只查找java.lang.Exception
及其子类。
答案 1 :(得分:1)
可以取消选中某些例外,这些例外称为“运行时例外”。例如,IllegalArumentException
是未经检查的异常,因为它是java.lang.RuntimeException
的后代。你可以阅读它here。