天天看點

finally和return的先後順序

finally會在return前執行, 但是return的路徑會先于finally形成. 代碼解析如下:

public class Test14 {
        public static void main(String[] args) {
            System.out.println(method());
        }
    
        public static int method() {
            int a = 10;
            int b = 0;
            try {
                System.out.println(a / b);
            } catch (ArithmeticException e) {
                //進入到catch語句,此時return 20(不是return a)路徑已經形成,
                //然後執行finally a=30,但是return的是20不是a-30,是以return值不影響
                a = 20;
                return a;
            } finally {
                a = 30;
                //如果加上下面的return a,則替換掉原先的return路徑,變為return 30. 
                //return a;
            }
            return 0;
        }    
    }

           

繼續閱讀