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