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++;
        }
    }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM