Java 的 try
和 catch
块是用于处理程序中可能发生的异常的关键组件。当一段代码可能引发异常时,通常将其置于 try
块中。如果在 try
块内的代码中确实发生了异常,那么该异常会被传递给紧随其后的 catch
块。如果没有匹配的 catch
块来处理异常,异常将继续向上抛出,直到被更高层级的 catch
块捕获,或者导致程序终止。
试一试(Try)块
可能引发异常的代码应放置在 try
块内。如果在 try
块内的代码中发生了异常,那么该异常将由关联的 catch
块处理。每个 try
块后应立即跟有一个 catch
块或 finally
块。
捕获(Catch)块
一个 catch
语句涉及到声明你想要捕获的异常类型。如果在受保护的代码中发生了异常,随后的 catch
块(或多个 catch
块)将被检查。如果发生的异常类型列在某个 catch
块中,那么异常将被传递给该 catch
块,就像参数传递到方法参数中一样。
语法
try {
} catch (ExceptionName e1) {
}
多个捕获块
一个 try
块后可以跟着多个 catch
块。多个 catch
块的语法如下:
语法
try {
} catch (ExceptionType1 e1) {
} catch (ExceptionType2 e2) {
} catch (ExceptionType3 e3) {
}
如果有多个 catch
块,一旦 try
块内的代码抛出了异常,该异常将被传递给列表中的第一个 catch
块。如果抛出的异常的数据类型与 ExceptionType1
匹配,那么它将在这个 catch
块被捕获。如果不匹配,异常将继续传递给第二个 catch
语句。这个过程将持续进行,直到异常被捕获或者没有匹配的 catch
块,此时当前方法停止执行并将异常传递给调用栈上的前一个方法。
示例
这里有一个代码段展示了如何使用多个 try/catch
语句。在这个示例中,我们通过除以零来制造一个错误。因为这不是 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("访问第三个元素:" + a[3]);
}
catch (ArrayIndexOutOfBoundsException e) {
System.out.println("ArrayIndexOutOfBoundsException 抛出:" + e);
} catch (Exception e) {
System.out.println("Exception 抛出:" + e);
}
System.out.println("离开块");
}
}
输出:
Exception 抛出:java.lang.ArithmeticException: / by zero
离开块
捕获多个异常
从 Java 7 开始,可以使用单个 catch
块来处理多个异常。这个特性简化了代码。
语法
catch (IOException|FileNotFoundException ex) {
logger.log(ex);
throw ex;
}
示例
这里有一个代码段展示了如何在一个语句中使用多个 catch
。在这个示例中,我们通过除以零来制造一个错误。在一个语句中处理 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("访问第三个元素:" + a[3]);
}
catch (ArrayIndexOutOfBoundsException | ArithmeticException e) {
System.out.println("Exception 抛出:" + e);
}
System.out.println("离开块");
}
}
输出:
Exception 抛出:java.lang.ArithmeticException: / by zero
离开块
以上代码示例展示了如何使用 try
和 catch
块来处理不同类型的异常。在实际应用中,合理使用异常处理可以让程序更加健壮,并且能够更好地应对运行时中可能遇到的问题。