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

Gre*_*ley 5 java exception-handling exception

如果这是一个愚蠢的问题,请原谅我,但据我所知,必须捕获并处理所有Java异常.例如,像这样会产生编译器错误:

public String foo(Object o) {
    if (o instanceof Boolean) {
        throw new Exception();
    }
    return o.toString();
}
Run Code Online (Sandbox Code Playgroud)

因为该方法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) {
        //...
    }
    //...
}
Run Code Online (Sandbox Code Playgroud)

最后,有时Java程序有时会由于未处理的异常而崩溃.

这是怎么发生的?

Tim*_*imo 5

你不必处理所有类型的异常.

但是,继承自java.lang.RuntimeException或者java.lang.Error是所谓的未经检查的异常的异常可以被try-catch构造捕获,但它们不一定是这样.

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

在文档中查看这篇文章.