try中的return和finally中的return

我們都知道在try-catch-finally中,try塊先執行,如果捕獲到異常,則執行catch塊,如果沒有捕獲到異常,那麼catch塊始終不執行,在catch塊執行完之後,finally塊最後執行。
則那麼問題來了(假設都沒有捕獲異常)
1,如果try塊中有return語句,那麼finally會執行嗎?
答案:會(實踐在後面)

2,如果finally塊中改變了try塊中的return語句要返回的值,那麼返回值會改變嗎?
答案:不會(實踐在後面)

3,如果finally塊中有return語句,那麼函數會通過try塊中的return返回還是通過try塊中的return返回?

答案:通過finally塊中的return返回。

實踐:
寫一個簡單的類,包含兩個方法

public class FinallyReturn {
	public static void main(String[] args) {
		int num = getNum();
		System.out.println("最後返回值是" + num);
	}
	private static int getNum(){
		int num = 4;
		try{
			num = num + 1;
			return num;
		}catch(Exception e) {
			e.printStackTrace();
		}finally{
			System.out.println("finall執行了!");
			num = num + 100;
			System.out.println("finall修改num爲:" + num);
		}
		//這句在這裏執行不到
		return 0;
	}
}

執行結果圖:
在這裏插入圖片描述
由圖可知:try塊中有return的時候,finally還是會執行,
返回的結果是5,說明finally塊修改了num的值,但是不影響最後的函數返回值。

再來看另外一種情況,和上面代碼差不多,只是在finally裏面加了一句return num

public class FinallyReturn {
	public static void main(String[] args) {
		int num = getNum();
		System.out.println("最後返回值是" + num);
	}
	private static int getNum(){
		int num = 4;
		try{
			num = num + 1;
			return num;
		}catch(Exception e) {
			e.printStackTrace();
		}finally{
			System.out.println("finall執行了!");
			num = num + 100;
			System.out.println("finall修改num爲:" + num);
			return num;
		}
	}
}

來看結果
在這裏插入圖片描述
由圖可知,如果try塊與finally塊中都有return的時候,函數通過finally塊中的return語句返回。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章