java中的多catch语句
我试图理解多catch语句在java中是如何工作的。在文档中,他们说不允许在catch语句中包含相关类型 这里我有一个小样本,我正在玩:java中的多catch语句,java,exception,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()
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());
}
}
}
这两个类都是异常的实例。首先,一个是显而易见的方式,第二个是从RuntimeException继承和RuntimeException继承异常
那么为什么要编译这段代码呢?异常a不应该也包括异常b?
谢谢通过
相关类型
我相信他们所指的关系是扩展(或子类)关系。因此,在您的情况下,您有:
Exception
├── a
└── RuntimeException
└── b
a是Exception的一个子类
b是RuntimeException的子类,RuntimeException是Exception的子类
a不是b的一个子类
b不是a的一个子类
因此,增强型捕捉块可以捕捉a和b
异常a不应该也包括异常b吗?
如果抛出了b
?a
如何捕捉到这一点?另一方面,您应该使用a
、B
和Test
作为类名。我认为规范更具体一些:“如果类型的联合包含两个可选的Di
和Dj
(I≠ j) 其中,Di
是Dj
的子类型-因此没有关于拥有共同祖先的任何内容(因为所有异常都必须是Throwable的后代,所以不起作用):“异常参数类型的表示中使用的每个类类型必须是类Throwable
或Throwable
的子类)请遵循命名约定。类(例外情况a和b)应以大写字符开头。对于例外也以“例外”结尾。是的,凯尔。现在有道理了。