异常的处理

一直以来,catch时子类在前,父类在后,两个都处理,但却。。。。。

import java.io.*;   

class BBB {   
  public static void main(String args[]) {   
    try {   
      throw new IOException();   
    } catch (IOException q) {   
      System.out.println("IOE");   
    } catch (Exception e) {   
      System.out.println("Exception"); // 这句为什么不执行 
    }   
  }   
} 

回复:
catch住一个IOException 处理了 然后就退出try-catch语句块啊

都被 IOException 捕获了啊。假如你的代码中会抛出 IOException,也会抛出 SQLException 的话,
那就会根据不同类型的异常由不同的异常处理块进行处理。

try {   
  ...   
  ...   
} catch (IOException e1) {   
    System.out.println("IOException");   
} catch (SQLException e2) {   
    System.out.println("SQLException");   
} 

异常只能被一个 catch 所捕获,因此越父类异常都应该写在子类异常的后面。

比如说,在普通的文件读写操作中,会同时抛出 FileNotFoundException 和 IOException,
经查询 API DOC 可以看出 IOException 是 FileNotFoundException 的父类异常。

因此写代码可以写成:

try {   
    ...   
} catch (FileNotFoundException e1) {   
    ...   
} catch (IOException e2) {   
    ...   
}  

但我们不能写成下面这样:

try {   
    ...   
} catch (IOException e2) {   
    ...   
} catch (FileNotFoundException e1) {   
    ...   
}  

因为如果在 try 中抛出 FileNotFoundException 的话,首先会被 IOException 的 catch 块所捕获,
FileNotFoundException 的 catch 块永远执行不到。

当然了,如果不需要在不同的异常 catch 块中写一些健壮性代码的话,FileNotFoundException 和
IOException 可以只使用 IOException catch 块,甚至可以直接使用 Exception 的 catch 块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值