Java中try和finally

Java中try和finally
学过Java的家人们都知道finally在Exception中的作用是一定会执行的,但是大家有没有想过在Exception处理异常时,try和finally的运行顺序到底是什么样子的呢(特别是有return时)。
1.先执行完try在执行finally。
2.先执行try在执行的中途在执行finally。
结果到底是什么让我们用代码来说事。

import java.util.Scanner;


public class Main {
    public static void main(String[] args) {
        System.out.println(check());
    }
    static int check(){
        int num = 10;
        try{
             num = 10;
            System.out.println(num);
             return num;

        }finally{
            num = 100;
            System.out.println(num);

        }

    }

}

当我们代码写成这样时,输出结果是这样的:
在这里插入图片描述
如果是try与finally的关系是第一种就不会出现100,因为在运行return运行就会结束,所以就只有第二种关系才对。
出现这种情况有部分同学就会问了博主博主“为什么最后一数是10而不是100,你不是说会在再行try并在return前执行finally吗,num=100,为什么输出的是10而不是100”。
这就和return运用有关了,在try中的return会另外在内存中开辟一个空间来储存num,而finally中return改变num的地方是栈而不是之前return储存的地方,return识别的num还是10,所以输出才是这种情况,当我把代码改为如下:

import java.util.Scanner;


public class Main {
    public static void main(String[] args) {
        System.out.println(check());
    }
    static int check(){
        int num = 10;
        try{
              num = 10;
             return num;

        }finally{
            num = 100;
             return num;

        }

    }

}

在这里插入图片描述
当代码这么写时输出就为100,说明博主上面说的是对的。

更多推荐