java學習個人筆記---finally子產品的陷阱
我們都知道try……finally在執行的過程中總會執行finally塊中的代碼(除try中有System.exit(0);外),但如果try塊中有return,finally塊中也有return,程式傳回的時候到底執行哪個return呢?如下:
public static int tryCatchFinallyTest1(){
int i=0;
try{
System.out.println("執行try塊");
//int a=20/0;//到catch語句中去
return i++;
}catch(Exception e){
e.printStackTrace();
return i++;
}finally{
System.out.println("執行finally塊");
return ++i;
}
}
public static void main(String[] args){
int k2=tryCatchFinallyTest1();
System.out.println("tryCatchFinallyTest1 return "+k2);
}
上面的傳回結果k2到底是1,2還是3?有興趣的同學可以自己動手實踐一下,實踐才是檢驗真理的唯一标準。
如果程式中try和finally中都有return的傳回語句時,執行順序如下:
執行完try塊中的return并不會馬上傳回,而是看是否有finally塊語句,如果沒有則馬上傳回,否則,進入finally塊,執行到finally塊中的return的時候,此時會馬上傳回,不會再跳會try塊中的return語句。
那麼,如果try後有catch塊結果會是怎樣呢?
同理将上述代碼中的注釋去掉跳到catch會得到一樣的結果。