Java 简明教程
Java - Finally Block
The finally Block in Java
最终于块紧跟 a try block or a catch block 后。无论是否发生异常,最终于块的代码都会始终执行。
使用 finally 块允许你运行你想要执行的任何清理类型语句,无论受保护代码中发生什么。
Points To Remember While Using Finally Block
-
catch 子句不能没有 try 语句。
-
try/catch 块出现时,不必有 finally 子句。
-
如果没有 catch 子句或 finally 子句,则不能出现 try 块。
-
任何代码不能出现在 try、catch、finally 块之间。
-
如果在 finally 块之前调用 exit() 方法,或者在程序执行中出现致命错误,则不会执行 finally 块。
-
finally 块会执行,即使方法在 finally 块之前返回一个值。
Java Finally Block Example
以下代码段展示了如何在处理异常后在 try/catch 语句后使用 finally。在此示例中,我们创建了一个错误,即使用无效的索引访问数组元素。catch 块正在处理异常并输出它。现在在 finally 块中,我们正在输出一条语句,表示 finally 块正在执行。
package com.tutorialspoint;
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
More Examples
Example 1
以下代码段展示了即使未处理异常,如何使用 finally 块在 try/catch 语句之后。在此示例中,我们创建了一个错误,即使用无效的索引访问数组元素。由于 catch 块没有处理异常,我们可以在输出中检查 finally 块正在输出一条语句来表示 finally 块正在执行。
package com.tutorialspoint;
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.tutorialspoint.ExcepTest.main(ExcepTest.java:8)
Example 2
以下代码段展示了如何使用 finally 块,其中一个方法可以在 try 块中返回一个值。在此示例中,我们在 try 块中返回一个值。我们可以在输出中检查,即使方法向调用函数返回一个值,finally 块也会输出一条语句,表示 finally 块正在执行。
package com.tutorialspoint;
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