try catch finaly对变量操作对变量和结果的影响

2025-08-08  本文已影响0人  flyjar

一、返回声明变量的情况

public class Demo{

    static int num;

    public static int Sum() {
       //这里把num的定义写在了try和finally的外部,num指向的就是一个了。
        try {
            num = 10;
            System.out.println(num);
            num = 30;
            return num;
        }catch (Exception e) {
            e.printStackTrace();
            num = 222;
            return num;
        }finally {
            num = 20;
            System.out.println("finally的num:"+num);
        }
    }

    public static void main(String[] args) {
        System.out.println("main:"+Sum());
        System.out.println("Demo.num"+Demo.num);
    }

}

输出

10
finally的num:20
main:30
Demo.num20

结论:try或catch的return是一个变量,函数的是从两个之中返回时,后面finally中语句有对返回的变量进行赋值的操作时,不会影响返回的值,但是会影响静态变量num,也就是会影响变量num。假如一些输入流输出流,可以在finally区域块把它们close,因为finally会影响最终的变量,但是不影响try(catch)返回结果,可以说try,catch结果的return虽然在finally后面执行,但是该结果的值要返回的值已经在finally执行前保存到内存,等到执行完finally后,再执行返回保存在内存的值(不受finally影响)。

二、直接返回字面量的情况

  // 场景1:try中发生异常,catch和finally都有return
    public static int test1() {
        try {
            System.out.println("执行try块");
            int num = 1 / 0; // 发生异常,try的return不会执行
            return 1;
        } catch (Exception e) {
            System.out.println("执行catch块");
            return 2; // 暂存返回值2,但不立即返回
        } finally {
            System.out.println("执行finally块");
            return 3; // 最终返回3,覆盖catch的2
        }
    }

    // 场景2:try正常执行return,finally有return
    public static int test2() {
        try {
            System.out.println("执行try块");
            return 1; // 暂存返回值1,不立即返回
        } catch (Exception e) {
            System.out.println("执行catch块");
            return 2;
        } finally {
            System.out.println("执行finally块");
            return 3; // 最终返回3,覆盖try的1
        }
    }

    public static void main(String[] args) {
        System.out.println("test1返回:" + test1());
        System.out.println("test2返回:" + test2());
    }

输出

执行try块
执行catch块
执行finally块
test1返回:3
执行try块
执行finally块
test2返回:3

上一篇 下一篇

猜你喜欢

热点阅读