Java 中的 try catch finally 流程控制
使用 **try** 和 **catch** 关键字组合,方法可以捕获异常。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
import java.io.*;
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;
}捕获多种类型的异常
从 Java 7 开始,您可以使用单个 catch 块处理多个异常,此功能简化了代码。以下是如何执行此操作:
catch (IOException|FileNotFoundException ex) {
logger.log(ex);
throw ex;Finally 块
finally 块位于 try 块或 catch 块之后。无论是否发生异常,finally 块中的代码始终都会执行。
使用 finally 块允许您运行任何您想要执行的清理类型语句,无论受保护代码中发生什么情况。
finally 块出现在 catch 块的末尾,并具有以下语法:
语法
try {
// Protected code
} catch (ExceptionType1 e1) {
// Catch block
} catch (ExceptionType2 e2) {
// Catch block
} catch (ExceptionType3 e3) {
// Catch block
}finally {
// The finally block always executes.
}示例
public class ExcepTest {
public static void main(String args[]) {
int a[] = new int[2];
try {
System.out.println("Access element three :" + a[3]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Exception thrown :" + e);
} finally {
a[0] = 6;
System.out.println("First element value: " + a[0]);
System.out.println("The finally statement is executed");
}
}
}这将产生以下结果:
输出
Exception thrown :java.lang.ArrayIndexOutOfBoundsException: 3 First element value: 6 The finally statement is executed
注意以下几点:
catch 子句不能独立存在,必须与 try 语句一起使用。
在存在 try/catch 块时,不必包含 finally 子句。
try 块不能独立存在,必须与 catch 子句或 finally 子句一起使用。
try、catch、finally 块之间不能存在任何代码。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP