- /*
- * 需求:如果在finnally执行的前面有return语句,则finally里的代码还会执行吗,会,在return的前还是后?
- * 答:会,前。准确的讲是在 return 的中间
- */
- public class FinallyDemo {
- public static void main(String[] args) {
- // 调用方法,输出结果
- System.out.println(getInt()); // 结果 a = 30
- }
- public static int getInt() {
- // 定义数组
- int[] arr = { 11, 22, 33, 44, 55 };
- int a = 10;
- // 异常处理
- try {
- System.out.println(arr[5]);
- a = 20;
- } catch (ArrayIndexOutOfBoundsException e) {
- a = 30;
- return a;
- // 当执行到 return a 时,会形成 return 30 的返回路径。
- // 但此时发现还有下面有 finally ,所以就跳转到执行 finally 语句了, a = 40。
- // 执行完 finally 语句后又回到了原来的返回路径,虽然a变成了40,但是输出的还是原来的return 30。
- } finally {
- a = 40;
- }
- return a;
- }
- }
复制代码
|