天天看點

java學習個人筆記---finally子產品的陷阱

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會得到一樣的結果。