finally 块位于 try 块或 catch 块之后。无论是否发生异常,finally 代码块始终都会执行。
无论受保护代码中发生什么情况,使用finally 块允许您运行要执行的任何清理类型语句。
finally 块出现在 catch 块的末尾,具有以下语法
语法
try {
// 受保护的代码
} catch (ExceptionType1 e1) {
// 捕获块
} catch (ExceptionType2 e2) {
// 捕获块
} catch (ExceptionType3 e3) {
// 捕获块
}finally {
//finally 块始终执行。
}
要记住的要点
如果没有 try 语句,catch 子句就不能存在。
每当 try/catch 块出现时,并不强制必须有 finally 子句。
如果没有catch 子句或finally 子句,try 块就不能出现。
任何代码都不能出现在在try、catch、finally块之间。
如果在finally块之前调用exit()方法或者程序执行中出现致命错误,则不会执行finally块。
即使方法在finally块之前返回一个值,finally块也会被执行。
示例1
这里代码段显示了如何在处理异常后在 try/catch 语句之后使用finally。在此示例中,我们使用无效索引访问数组元素时产生错误。 catch 块正在处理异常并打印相同的异常。现在在finally块中,我们打印一条语句,表示finally块正在执行。
package com.yxjc123;
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
示例2
这里是显示代码段如何在 try/catch 语句之后使用finally,即使异常没有被处理。在此示例中,我们使用无效索引访问数组元素时产生错误。由于 catch 块不处理异常,我们可以在输出中检查finally 块正在打印一条语句,表示finally 块正在执行。
package com.yxjc123;
public class ExcepTest {
public static void main(String args[]) {
int a[] = new int[2];
try {
System.out.println("Access element three :" + a[3]);
} catch (ArithmeticException 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");
}
}
}
输出
First element value: 6
The finally statement is executed
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at com.yxjc123.ExcepTest.main(ExcepTest.java:8)
示例 3
这是显示如何使用finally 块的代码段,其中方法可以在try 块中返回值。在此示例中,我们在 try 块中返回一个值。我们可以在输出中检查finally块正在打印一条语句,表明即使方法将值返回给调用者函数之后,finally块也会被执行。
package com.yxjc123;
public class ExcepTest {
public static void main(String args[]) {
System.out.println(testFinallyBlock());
}
private static int testFinallyBlock() {
int a[] = new int[2];
try {
return 1;
} 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");
}
return 0;
}
}
输出
First element value: 6
The finally statement is executed
1