Java 简明教程

Java Multiple Catch Blocks

Multiple Catch Blocks in Java

Java 中的多个 catch 块用于捕获/处理可能从特定代码段引发的多个 exceptionstry block 可以有多个 catch 块来处理多个异常。

Syntax: Multiple Catch Blocks

try {
   // Protected code
} catch (ExceptionType1 e1) {
   // Catch block
} catch (ExceptionType2 e2) {
   // Catch block
} catch (ExceptionType3 e3) {
   // Catch block
}

前面的语句演示了三个 catch 块,但是你可以在一个 try 之后可以有任意数量的 catch 块。如果受保护代码中发生异常,则异常被抛到列表中的第一个 catch 块。如果抛出的异常的数据类型匹配 ExceptionType1,则异常在该处被捕获。如果没有,则异常传递到第二个 catch 语句。这将持续到异常被捕获或者通过所有 catch,在这种情况下,当前方法停止执行并且异常被抛到调用堆栈上先前的那个方法。

Points to Remember while using Multiple Catch Blocks

  1. 一次只能处理一类异常。在 protected 中,将只引发一类异常,因此只会在一个相关的 catch 块中处理该异常。

  2. catch 块的顺序非常重要。顺序应该是从特定异常到泛型异常。在父异常块位于子异常块之前的情况下,编译器将提出抱怨并抛出编译时错误。

Example of Java Multiple Catch Blocks

此处是如何使用多个 try/catch 语句的代码片段。在此示例中,我们正在通过将一个值除以 0 来创建一个错误。由于该错误并不是一个 ArrayIndexOutOfBoundsException,所以下一个 catch 块处理该异常并打印该详细信息。

package com.tutorialspoint;

public class ExcepTest {

   public static void main(String args[]) {
      try {
         int a[] = new int[2];
         int b = 0;
         int c = 1/b;
         System.out.println("Access element three :" + a[3]);
      }
      catch (ArrayIndexOutOfBoundsException e) {
         System.out.println("ArrayIndexOutOfBoundsException thrown  :" + e);
      }catch (Exception e) {
          System.out.println("Exception thrown  :" + e);
      }
      System.out.println("Out of the block");
   }
}
Exception thrown  :java.lang.ArithmeticException: / by zero
Out of the block

Handling Multiple Exceptions Using Multiple Catch Blocks

在此代码片段中,我们展示了如何使用另一个多个 try/catch 语句的示例。在此示例中,我们正在通过将一个值除以 0 来创建一个错误并利用 ArithmeticException 处理该错误。

Example

package com.tutorialspoint;

public class ExcepTest {

   public static void main(String args[]) {
      try {
         int a[] = new int[2];
         int b = 0;
         int c = 1/b;
         System.out.println("Access element three :" + a[3]);
      }
      catch (ArithmeticException e) {
         System.out.println("ArithmeticException thrown  :" + e);
      }
      catch (ArrayIndexOutOfBoundsException e) {
         System.out.println("ArrayIndexOutOfBoundsException thrown  :" + e);
      }catch (Exception e) {
          System.out.println("Exception thrown  :" + e);
      }
      System.out.println("Out of the block");
   }
}
ArithmeticException thrown  :java.lang.ArithmeticException: / by zero
Out of the block

Handling Multiple Exceptions Within A Single Catch Block

自 Java 7 起,你可以使用一个 catch 块处理多个异常,这个功能简化了代码。以下是处理它的方法 −

Syntax

catch (IOException|FileNotFoundException ex) {
   logger.log(ex);
   throw ex;

Example

以下代码片段展示了如何在单一语句中使用多个 catch。在这个例子中,我们通过将一个值除以 0 来创建一个错误。在单一语句中,我们处理 ArrayIndexOutOfBoundsException 和 ArithmeticException。

package com.tutorialspoint;

public class ExcepTest {

   public static void main(String args[]) {
      try {
         int a[] = new int[2];
         int b = 0;
         int c = 1/b;
         System.out.println("Access element three :" + a[3]);
      }
      catch (ArrayIndexOutOfBoundsException | ArithmeticException e) {
         System.out.println("Exception thrown  :" + e);
      }
      System.out.println("Out of the block");
   }
}
Exception thrown  :java.lang.ArithmeticException: / by zero
Out of the block