處理異常時,在catch中return會怎麼樣?

山有木xi發表於2020-03-03

在實際操作中,還有一個很有意思的小問題,在try-catch-finally,如果catch中return了,還會執行finally嗎

答案是:會的,因為finally的作用就是處理善後,但是是在return前執行

public class a{
public static void main(String[] args){
     System.out.println(gi());
}
public static int gi(){
   int b=10;
   try{
   System.out.println(b/0);
   b=99;
   }
   catch(ArithmeticException e){
   b=66;
   return b;
   }finally{
   b=20;
   //return b;
   }
}
}

上面的程式碼如果,造成執行最後的結果是66

這時候可能有人會好奇,不是說在處理異常中,catch哪怕return了,也會執行finally嗎?

實際上,在 try-catch-finally中 ,catch裡面return了也會,還是會執行finally

具體執行步驟:

catch: b=66  --->    return b=return 66   --->    finally:b=20   ---> 結束程式

而我們,如果把註釋裡面的 return b也放出來

具體執行步驟變為:

catch: b=66   --->    return b=return 66   --->    finally:b=20   retun b=return 20   ---> 結束程式

也就是說在finally中,如果沒有return,而catch中有return,則return的值在catch中就已經確認,

隨後執行的finally,無論發生什麼,只要沒有return,就不會改變最終輸出的結果

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69917874/viewspace-2678286/,如需轉載,請註明出處,否則將追究法律責任。

相關文章