当必须始终捕获异常时,Java程序如何崩溃?

时间:2015-06-01 02:16:26

标签: java exception exception-handling

请原谅我这是一个愚蠢的问题,但据我所知,必须捕获和处理所有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程序有时会崩溃。

这是怎么发生的?

2 个答案:

答案 0 :(得分:5)

您不必处理所有种类的例外情况。

java.lang.RuntimeExceptionjava.lang.Error继承的例外是所谓的未经检查的例外,可以通过try-catch构造捕获,但他们不必但是,不过。

正如您在java.lang.Error的API文档中所看到的,它不会从java.lang.Exception继承。出于这个原因,它不会被你的try-catch块捕获 - 你只查找java.lang.Exception及其子类。

查看this article in the docs

答案 1 :(得分:1)

可以取消选中某些例外,这些例外称为“运行时例外”。例如,IllegalArumentException是未经检查的异常,因为它是java.lang.RuntimeException的后代。你可以阅读它here