java - 当必须始终捕获异常时,Java 程序怎么会崩溃?

标签 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() 没有)在 try/catch block 中围绕 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 程序有时仍会由于未处理异常而崩溃。

这是怎么发生的?

最佳答案

您不必处理所有 种异常。

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

正如您在java.lang.Error 的API 文档中所见,它并没有继承自java.lang.Exception。因此,它不会被您的 try-catch block 捕获 - 您只需查找 java.lang.Exception 及其子类。

看看this article in the docs .

关于java - 当必须始终捕获异常时,Java 程序怎么会崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30564771/

相关文章:

java - 将自相交 Path2D 拆分为多个非自相交路径的算法?

java - 在android中替换TextWatcher中的字符

java - 如何在 while 循环内增加 charAt 值

java - 如何在 JVM 级别捕获 OutOfMemory 错误?

java - 这个伞异常的原因是什么

scala - Spark 任务不可序列化

Java 8 : Lambda-Streams, 按带有异常的方法过滤

python - 使用 assert 在 python 中引发单元测试

java - 使用java 8 Stream分割ArrayList并进行统计

java - 使用异常处理 Java REST API 的应用程序和业务故障场景