Java 编程/关键字/finally
外观
finally
是一个关键字,它是 try
块的可选结尾部分。
代码部分 1: try 块。
try {
// ...
} catch (MyException1 e) {
// Handle the Exception1 here
} catch (MyException2 e) {
// Handle the Exception2 here
} finally {
// This will always be executed no matter what happens
}
|
finally 块中的代码将始终执行。即使在 try 块中存在异常或执行 return
语句,这种情况也是如此。
try 块中可能发生三种情况。首先,没有抛出异常
|
|
您可以看到我们已通过 try
块,然后我们已执行 finally
块,并已继续执行。现在,抛出了一个捕获的异常:|
代码部分 3: 抛出了一个捕获的异常。
System.out.println("Before the try block");
try {
System.out.println("Enter inside the try block");
throw new MyException1();
System.out.println("Terminate the try block");
} catch (MyException1 e) {
System.out.println("Handle the Exception1");
} catch (MyException2 e) {
System.out.println("Handle the Exception2");
} finally {
System.out.println("Execute the finally block");
}
System.out.println("Continue");
|
代码部分 3 的控制台
Before the try block Enter inside the try block Handle the Exception1 Execute the finally block Continue |
我们已通过 try
块,直到发生异常的位置,然后我们已执行匹配的 catch
块、finally
块,并已继续执行。现在,抛出了一个未捕获的异常
代码部分 4: 抛出了一个未捕获的异常。
System.out.println("Before the try block");
try {
System.out.println("Enter inside the try block");
throw new Exception();
System.out.println("Terminate the try block");
} catch (MyException1 e) {
System.out.println("Handle the Exception1");
} catch (MyException2 e) {
System.out.println("Handle the Exception2");
} finally {
System.out.println("Execute the finally block");
}
System.out.println("Continue");
|
代码部分 4 的控制台
Before the try block Enter inside the try block Execute the finally block |
我们已通过 try
块,直到发生异常的位置,并已执行 finally
块。没有代码在 try-catch 块之后执行。如果在 try-catch 块之前发生异常,则不会执行 finally
块。
如果在 finally 中使用 return
语句,它将覆盖 try-catch 块中的 return 语句。例如,结构
代码部分 5: Return 语句。
try {
return 11;
} finally {
return 12;
}
|
将返回 12,而不是 11。专业的代码几乎不包含更改执行顺序的语句(如 return
、break
、continue
)在 finally 块中,因为这样的代码更难阅读和维护。
另请参阅