Java 教程

Java 控制语句

面向对象编程

Java 内置类

Java 文件处理

Java 错误和异常

Java 多线程

Java 同步

Java 网络

Java 集合

Java 接口

Java 数据结构

Java 集合算法

高级 Java

Java 杂项

Java API 和框架

Java 类参考

Java 有用资源

Java - catch 关键字



Java 的catch关键字用于捕获 Java 中的异常。异常(或异常事件)是在程序执行期间出现的错误。当发生异常时,程序的正常流程会被中断,并且程序/应用程序会异常终止,这是不推荐的,因此,需要处理这些异常。

异常可能由于多种原因发生。以下是一些发生异常的场景。

  • 用户输入了无效数据。

  • 需要打开的文件找不到。

  • 通信过程中网络连接丢失或 JVM 内存不足。

其中一些异常是由用户错误引起的,另一些是由程序员错误引起的,还有一些是由某种方式发生故障的物理资源引起的。

捕获异常

方法使用trycatch关键字的组合来捕获异常。try/catch 块放置在可能生成异常的代码周围。try/catch 块内的代码称为受保护代码,使用 try/catch 的语法如下所示:

语法

try {
   // Protected code
} catch (ExceptionName e1) {
   // Catch block
}

容易出现异常的代码放在 try 块中。当发生异常时,该异常由与其关联的 catch 块处理。每个 try 块都应紧跟一个 catch 块或 finally 块。

catch 语句涉及声明您尝试捕获的异常类型。如果受保护代码中发生异常,则检查 try 后面的 catch 块(或块)。如果发生的异常类型在 catch 块中列出,则异常将传递给 catch 块,就像将参数传递给方法参数一样。

示例

在下面的示例中,声明了一个包含 2 个元素的数组。然后,代码尝试访问数组的第 3 个元素,这会引发异常。

// File Name : ExcepTest.java
package com.tutorialspoint;

public class ExcepTest {

   public static void main(String args[]) {
      try {
         int a[] = new int[2];
         System.out.println("Access element three :" + a[3]);
      } catch (ArrayIndexOutOfBoundsException e) {
         System.out.println("Exception thrown  :" + e);
      }
      System.out.println("Out of the block");
   }
}

输出

Exception thrown  :java.lang.ArrayIndexOutOfBoundsException: 3
Out of the block

多个 Catch 块

try 块后面可以跟多个 catch 块。多个 catch 块的语法如下所示:

语法

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,在这种情况下,当前方法停止执行,并且异常被抛到调用栈上的前一个方法。

示例

以下代码段显示了如何使用多个 try/catch 语句。

try {
   file = new FileInputStream(fileName);
   x = (byte) file.read();
} catch (IOException i) {
   i.printStackTrace();
   return -1;
} catch (FileNotFoundException f) // Not valid! {
   f.printStackTrace();
   return -1;
}

示例

在下面的示例中,声明了一个包含 2 个元素的数组。然后代码尝试访问数组的第 3 个元素,这将抛出一个异常。我们定义了多个 catch 块来处理不同类型的异常。

// File Name : ExcepTest.java
package com.tutorialspoint;

public class ExcepTest {

   public static void main(String args[]) {
      try {
         int a[] = new int[2];
         System.out.println("Access element three :" + a[3]);
      } catch (ArrayIndexOutOfBoundsException e) {
         System.out.println("Exception thrown  :" + e);
      }catch(Exception e) {
         System.out.println("Exception thrown  :" + e);
      }
      System.out.println("Out of the block");
   }
}

输出

Exception thrown  :java.lang.ArrayIndexOutOfBoundsException: 3
Out of the block

捕获多种类型的异常

从 Java 7 开始,您可以使用单个 catch 块处理多个异常,此功能简化了代码。以下是如何操作:

catch (IOException|FileNotFoundException ex) {
   logger.log(ex);
   throw ex;
java_basic_syntax.htm
广告