Java基础——try-catch中的return

 

有这么一段代码,在执行func方法后在Test中打印返回值。

    public int func(){
        int i = 0;
        try {
            i++;
            throw new Exception();
        }catch (Exception e){
            return i++;
        }finally {
            i++;
        }
    }
@Test
    public void test(){
        System.out.println(func());
    }

执行结果:1 

按照往常的想法,原以为,return 返回之前会先进行运算,所以会去考虑i++之后的值,以及finally 内的代码,这是错误的。

进行断点调试后,发现在执行catch中的return之前会先执行finally,而返回的值却是i运算之前的值。原来是因为在执行return的时候

会先i的值赋值给一个中间变量,然后再去执行其他代码,最终再将这个中间变量返回。所以即使在return之前 i 进行了运算也不会改变 return 出去的值。

以上代码可以用以下代码具体的展示。

public int func(){
        int i = 0;
        try {
            i++;
            throw new Exception();
        }catch (Exception e){
            // 在return之前将i++赋值给一个中间变量,即 temp = 1;
            int temp  = i++;
            return temp;
        }finally {
            i++;
        }
    }

 

posted @ 2022-02-16 14:29  阿毛爱买买  阅读(1185)  评论(0)    收藏  举报