> For the complete documentation index, see [llms.txt](https://maxwell.gitbook.io/way-to-architect/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://maxwell.gitbook.io/way-to-architect/java-yu-yan/yi-chang/duo-catch-de-zhi-hang-qing-kuang.md).

# 多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");
        }
    }
}
```
