java中的多个catch语句

Adr*_*ian 0 java exception

我试图了解多个 catch 语句在 Java 中的工作原理。在文档中,他们说不允许在 catch 语句中使用相关类型。

在这里,我有一个我正在玩的小样本:

class a extends Exception{}

class b extends RuntimeException{}

public class test{
    public static void main(String[] args){
        try {
            System.out.println(new a() instanceof Exception);
            System.out.println(new b() instanceof Exception);
            throw new a();
        }catch(a | b e) {
            System.out.println(e.getStackTrace());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这两个类都是 Exception 的实例。首先,一个是明显的方式,第二个继承自 RuntimeException 和 RuntimeExeption 继承 Exception。

那么为什么要编译这段代码呢?不应该例外a盖也例外b?谢谢

Kyl*_*ure 7

通过related types我相信他们指的是关系,是延伸(或子类)的关系。所以在你的情况下,你有:

Exception 
??? a
??? RuntimeException
    ??? b
Run Code Online (Sandbox Code Playgroud)

a 是 Exception 的子类

b 是 RuntimeException 的子类,它是 Exception 的子类

a 不是 b 的子类 AND b 不是 a 的子类

因此,增强的捕获块可以捕获 a 和 b。