java - 如果我们从 java 中删除已检查的异常会发生什么?

标签 java exception

我已经通过了这次面试 http://www.artima.com/intv/handcuffs.html 以及一些关于检查异常的文章和讨论。那就是说 checked exception 是引入 java 的未经尝试的实验。它会带来版本性和可扩展性问题。 Bruce eckel 还提供了一个适配器将checked exception 转换为unchecked exception 以避免调用force to catch exception。我还希望 hibernate 从 checked exception 迁移到 unchecked exception。我想知道如果我们移除checked exception 机制会怎样?我也同意 checked exception 没有必要存在。

最佳答案

实际上不会发生太多事情。在 VM 级别,所有异常都是未经检查的。您可以通过执行例如验证这一点以下内容:

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

public class B {
    public static void main(String[] args) {
        A.a();
    }
}

将这些类分别存放在A.javaB.java文件中,并进行编译。然后,将 A 更改为以下内容:

public class A {
    public static void a() throws Exception {
        throw(new Exception("foo"));
    }
}

重新编译A.java而不重新编译B.java。然后运行 ​​B,您将看到从 A 抛出的异常传播并终止程序,就好像它是一个 RuntimeException,没有 VM提示链接错误或任何事情。

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

关于java - 如果我们从 java 中删除已检查的异常会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14107278/

相关文章:

java - 使用有效 CA 签名的小程序仍显示为未知发布者

java - rxjava 2 中 BackpressureStrategy.BUFFER 和 onBackpressureBuffer 运算符之间的区别

c++ - C++ 是否已经有了某种反射?

javascript - 为什么这个 JavaScript Promise reject() 在结果回调中得到处理?

java - 为什么我的 Android 程序中会出现 PatternSyntaxException?

java - JAXB 解码在运行时选择根名称

java - 如何将参数传递给自定义适配器?

java - 同一网络应用程序中不同用户的不同 session 超时

java - 在java程序中添加异常

java - Flink 和 Cassandra 连接问题