如果在try里面執行return,那么還會不會執行finally?
前言
我們都知道,finally在捕獲例外的操作中,總是最后并且一定會執行的,那么,如果我在使用try finally的時候,如果try 給了一個return,那么還會不會執行finally呢?這里就來試一試
finally
Finally代碼不管有沒有例外發生它都會執行,
沒有例外發生的時候,在try內的代碼執行結束后,執行finally,
如果發生了例外并且給catch捕獲,則在執行完catch之后執行finally,
如果有例外且未被捕獲,則在例外被拋給上層之前執行,
事實上,不用try catch也可以直接執行 try finally,那么如果我在try 里面 使用 return 會怎樣呢?
代碼如下
public class Test {
public static void main(String[] args) {
int result = fun();
System.out.println("result = " + result);
}
public static int fun(){
int ret = 0;
try{
return ret;
}finally {
ret = 5;
System.out.println("ret = " + ret);
}
}
}
測驗的結果是,finally里面的代碼依然會被執行,但是,雖然給ret賦值了5,但回傳的值最侄訓是0,所以,即使在try里面使用了return,也依然會執行finally,但是finally無法改變return的值,
因為在執行的程序中, try執行到return,會先把ret的值保存在一個臨時變數中,等到finally執行完畢之后才會回傳,因此finally無法改變最終的回傳結果
那么,如果我在finally里面也執行一個return呢?結果會怎樣?
代碼如下
public class Test {
public static void main(String[] args) {
int result = fun();
System.out.println("result = " + result);
}
public static int fun(){
int ret = 0;
try{
return ret;
}finally {
ret = 5;
return ret;
}
}
}
這個時候try里面的return就會丟失,只會執行finally里面的return
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/225334.html
標籤:java
上一篇:臨時抱佛腳?醒醒!稍有一點Java經驗背面試題的在面試官面前是根本沒有用的!
下一篇:spring cloud Feign+Hystrix實作Fallback多級降級,Timeout降級,Request Cache減壓
