gpt4 book ai didi

java - 父类(super class)型和子类型异常处理

转载 作者:行者123 更新时间:2023-11-29 07:44:19 24 4
gpt4 key购买 nike

考虑这段代码:

public class CheckException 
{
public static void main(String [] args)
{
int a = 10;
try{
int c = a/0;
} catch(Exception e){

} catch(ArithmeticException e1){ \\ compilation error

}
}
}

我怀疑编译错误是在第二次捕获时产生的,因为它已经被父类(super class)型异常处理了。但是为什么当第二个 catch block 到达第一个位置并且第一个到达第二个位置时(如下所示)不会出现编译错误?

public class CheckException {

public static void main(String [] args){

int a = 10;
try{
int c = a/0;
} catch(ArithmeticException e){
// System.out.println("1");
}
catch(Exception e1){
// System.out.println("2");
}
}

}

然后第一个 block (即 ArithmeticException)也将在到达 catch(异常 e)之前处理异常。

已修改

现在我在 catch(Exception e) 之前添加所有未检查的异常。

public class CheckException {

public static void main(String [] args){

int a = 10;
try{
int c = a/0;
} catch(ArithmeticException e){
System.out.println("1");
}
catch(ArrayIndexOutOfBoundsException e1){
System.out.println("2");
}
catch(ClassCastException e1){
System.out.println("2");
}
catch(IllegalArgumentException e1){
System.out.println("2");
}
catch(IllegalStateException e1){
System.out.println("2");
}
catch(NullPointerException e1){
System.out.println("2");
}
catch(AssertionError e1){
System.out.println("2");
}
catch(ExceptionInInitializerError e1){
System.out.println("2");
}
catch(StackOverflowError e1){
System.out.println("2");
}
catch(NoClassDefFoundError e1){
System.out.println("2");
}
catch(ArrayStoreException e1){
System.out.println("2");
}
catch(IllegalMonitorStateException e1){
System.out.println("2");
}
catch(IndexOutOfBoundsException e1){
System.out.println("2");
}
catch(NegativeArraySizeException e1){
System.out.println("2");
}
catch(SecurityException e1){
System.out.println("2");
}
catch(UnsupportedOperationException e1){
System.out.println("2");
}
catch(Exception e1){
System.out.println("2");
}
}

}

现在,所有未经检查的异常都在到达 catch(Exception e) 之前得到处理。那么,除了这些未产生编译错误之外,是否还有未检查的异常?还是其他原因?

最佳答案

在 Java 中,catch block 按照它们在源文件中出现的顺序触发。

因此,如果更一般的 Exception 先出现,如果抛出 ArithmeticException 并且无法访问第二个 catch block ,它也会触发。

另一方面,如果更具体的 ArithmeticException 的 catch block 先出现,那么 Exception 的 catch block 不会变得不可访问,因为有子类未被第一个 block 捕获的 Exception

关于java - 父类(super class)型和子类型异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27247531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com