为什么需要捕获"Exception"而不是子类"RuntimeException"?

cod*_*leb 10 java exception-handling exception

下图显示"Checked"和"Unchecked"异常是其子类Exception.我发现你需要捕获一个令人困惑Exception但你不需要捕获一个RuntimeException直接继承的Exception.有没有理由让开发人员不让我们抛出异常而不需要抓住它们?

更具体地说:为什么你只能忽视RuntimeExceptions它和它的孩子?为什么没有一个被引入的类被引入CheckedException extends Exception,你只需要抓住它并且它是孩子们?

令人困惑的部分是,您可以RuntimeException毫无问题地将所有内容丢弃,但是当您向上移动到Exception层次结构中时,您需要在某个时刻捕获它.这很令人困惑,因为"抽象"通常会起作用.你向上移动的越多,所有东西都越简单,越多.这不是这种情况.你移动得越多,你就越需要做(比如,在到达后放置try/catch Exception).

在此输入图像描述

fgb*_*fgb 5

如果Exception未选中,那么您可以隐式地将已检查的异常转换为未经检查的异常,这意味着您可以抛出已检查的异常而不会像以下那样捕获它们:

public void f() {
    Exception e = new IOException();
    throw e;
}
Run Code Online (Sandbox Code Playgroud)

并且使用重写方法,如果抛出一个更具体的异常,可以添加捕获不在超类中的异常的需求:

public void f() throws Exception {
}

...

@Override
public void f() throws IOException {
}
Run Code Online (Sandbox Code Playgroud)