欢迎来IT培训班!

咨询热线 18940085928

IT培训网 > 知识学习 > JAVA开发 >

Java 7新特性:多异常捕获

授课机构:IT培训班

地址:北京

网报价格:详询

课程原价:

咨询热线:18940085928

课程详情 相关推荐 学校地址 网上报名

前面我们学习的多 catch 代码块虽然客观上提高了程序的健壮性,但是也导致了程序代码量大大增加。如果有些异常种类不同,但捕获之后的处理是相同的,例如以下代码。

		
  1. try{
  2. // 可能会发生异常的语句
  3. } catch (FileNotFoundException e) {
  4. // 调用方法methodA处理
  5. } catch (IOException e) {
  6. // 调用方法methodA处理
  7. } catch (ParseException e) {
  8. // 调用方法methodA处理
  9. }
3 个不同类型的异常,要求捕获之后的处理都是调用 methodA 方法。为了解决这种问题,Java 7 推出了多异常捕获技术,可以把这些异常合并处理。上述代码修改如下:

		
  1. try{
  2. // 可能会发生异常的语句
  3. } catch (IOException | ParseException e) {
  4. // 调用方法methodA处理
  5. }
注意:由于 FileNotFoundException 属于 IOException 异常,IOException 异常可以捕获它的所有子类异常。所以不能写成 FileNotFoundException | IOException | ParseException 。 使用一个 catch 块捕获多种类型的异常时需要注意如下两个地方。
  • 捕获多种类型的异常时,多种异常类型之间用竖线|隔开。
  • 捕获多种类型的异常时,异常变量有隐式的 final 修饰,因此程序不能对异常变量重新赋值。
下面程序示范了 Java 7 提供的多异常捕获。

		
  1. public class ExceptionTest {
  2. public static void main(String[] args) {
  3. try {
  4. int a = Integer.parseInt(args[0]);
  5. int b = Integer.parseInt(args[1]);
  6. int c = a / b;
  7. System.out.println("您输入的两个数相除的结果是:" + c);
  8. } catch (IndexOutOfBoundsException | NumberFormatException | ArithmeticException e) {
  9. System.out.println("程序发生了数组越界、数字格式异常、算术异常之一");
  10. // 捕获多异常时,异常变量默认有final修饰
  11. // 所以下面代码有错
  12. e = new ArithmeticException("test");
  13. } catch (Exception e) {
  14. System.out.println("未知异常");
  15. // 捕获一种类型的异常时,异常变量没有final修饰
  16. // 所以下面代码完全正确
  17. e = new RuntimeException("test");
  18. }
  19. }
  20. }
上面程序中第一行粗体字代码使用了IndexOutOfBoundsException|NumberFormatException|ArithmeticException来定义异常类型,这就表明该 catch 块可以同时捕获这 3 种类型的异常。捕获多种类型的异常时,异常变量使用隐式的 final 修饰,因此上面程序的第 12 行代码将产生编译错误;捕获一种类型的异常时,异常变量没有 final 修饰,因此上面程序的第 17 行代码完全正确。
  • 学校名称:IT培训网

    固定电话:18940085928

    授课地址:线下 预约名额

报名信息