多catch的执行情况
以下程序的输出结果是什么:
public class ExceptionA extends Exception {
}
public class ExceptionB extends ExceptionA {
}
public class ExceptionTest {
public static void main(String[] args){
try{
throw new ExceptionB();
}catch (ExceptionA e){
System.out.println("ExceptionA");
}catch (Exception e){
System.out.println("Exception");
}
}
}
输出结果为:
ExceptionA
对于try里面发生的异常,它会根据发生的异常和catch里面的进行匹配:按照catch块从上往下匹配,当它匹配某一个catch块的时候,就直接进入到这个catch块里面去了,而忽略后面所有的catch块。
另外:在写异常处理的时候,一定要把异常范围小的放在前面,范围大的放在后面,即如果多个catch块中的异常出现继承关系,父类异常catch块放在下面(否则,连编译都无法通过)。
也就是说,下面的代码,无法通过编译:
public class ExceptionA extends Exception {
}
public class ExceptionB extends ExceptionA {
}
public class ExceptionTest {
public static void main(String[] args){
try{
throw new ExceptionB();
}catch (ExceptionA e){
System.out.println("ExceptionA");
}catch (ExceptionB e){
System.out.println("ExceptionB");
}catch(Exception e){
System.out.println("Exception");
}
}
}
Last updated