如果我们从 Java 中删除受检异常会发生什么?

pyt*_*nee 2 java exception

我经历了这次采访 http://www.artima.com/intv/handcuffs.html 以及一些关于检查异常的文章和讨论。这checked exception就是引入 java 的未经尝试的实验。它会带来版本性和可扩展性问题。布鲁斯·埃克尔还提供了一个适配器转换checked exception,以unchecked exception避免所谓的力量抓例外。我也从心脏冬眠的举动checked exceptionunchecked exception。我想知道如果我们删除checked exception机制会怎样?我也同意checked exception没有必要存在。

Dol*_*000 5

实际上不会发生很多事情。在 VM 级别,未检查所有异常。您可以通过执行以下操作来验证这一点:

public class A {
    public static void a() {
        /* Do nothing */
    }
}

public class B {
    public static void main(String[] args) {
        A.a();
    }
}
Run Code Online (Sandbox Code Playgroud)

在各自的文件存储这些类A.javaB.java并编译它们。然后,更改A为以下内容:

public class A {
    public static void a() throws Exception {
        throw(new Exception("foo"));
    }
}
Run Code Online (Sandbox Code Playgroud)

A.java重新编译而不重新编译B.java。然后运行B,您将看到从A传播和终止程序中抛出的异常,就好像它是一个RuntimeException,而虚拟机不会抱怨链接错误或任何事情。

受检异常仅仅是 Java 语言的语法级特性。删除它不会影响 VM 实现,甚至不会影响语言模型。