捕获多个异常:
* 多个异常使用捕获又该如何处理呢?
1. 多个异常分别处理。
2. 多个异常一次捕获,多次处理。
3. 多个异常一次捕获一次处理。直接在写上catch(Exception e)
一般我们是使用一次捕获多次处理方式,格式如下:
```java
try{
编写可能会出现异常的代码
}catch(异常类型A e){ 当try中出现A类型异常,就用该catch来捕获.
处理异常的代码
//记录日志/打印异常信息/继续抛出异常
}catch(异常类型B e){ 当try中出现B类型异常,就用该catch来捕获.
处理异常的代码
//记录日志/打印异常信息/继续抛出异常
}
```
> 注意:
*这种异常处理方式,要求多个catch中的异常不能相同,并且若catch中的多个异常之间有子父类异常的关系,那么子类异常要求在上面的catch处理,父类异常在下面的catch处理。
------------------------------------------------------以下参考博客大佬的,走你--------------------------------------------------------------------
父子异常的处理
一、子类方法只能抛出父类方法的异常或者是其子异常(对于这种限制,主要是因为子类在做向上转型的时候,不能正确地捕获异常)
二、子类构造器必须要抛出父类构造器的异常或者其父异常(这是因为子类构造器中默认添加了父类的构造器)
三、异常丢失
1、在finally中抛出异常,可能会之前抛出的异常丢失
package thinkinginjava;
public class FinallyException {
public static void main(String[] args){
try{
try{
throw new RedException();
}finally{
//把上一个异常覆盖掉
throw new BlueException();
}
}catch(Exception e){
System.out.println(e);
}
}
}
class RedException extends Exception{}
class BlueException extends Exception{}
运行结果:thinkinginjava.BlueException
2、在finally中使用return,不会抛出异常
package thinkinginjava;
public class ReturnException {
public static void main(String[] args){
try{
throw new Exception();
}finally{
return;
}
}
}
以上代码我们看到它抛出了异常,但运行时不会有任何输出