關於return和finally的一些細節。

finally是在return前仍是return後呢?

測試1:

先看一段代碼:java

這個是方法類:函數

//方法類
public class test11 {
	public int test1(){
		int x=1;
		try{
			return x; //返回x
		}catch(Exception e){
			return 9999;//隨便返回,不寫報錯
		}finally{
			++x;//x自加
		}
		
		
	}
	
}

測試類:測試

public class Mytest {
	public static void main(String[] args) {
		System.out.println(new test11().test1());
	}
}

-----------------控制檯輸出:------------------spa

 

這段代碼能說出,最起碼 finally 是在 return 以後才進行的,不然 ++i 就會變成2。code

可是這麼說又不徹底準確,或者說細節沒有考慮周全。io

測試2:

請看下面一段代碼:class

方法代碼:test

public class test11 {
	//壓制警告的註解,不寫的話, finally 就會有黃線警告。
	@SuppressWarnings("finally")
	public int test1(){
		int x=1;
		try{
			return x;
		}catch(Exception e){
			return 9999;
		}finally{
			return ++x;
		}
		

	}
	
}

測試代碼不變:方法

---------------------控制檯輸出:---------------------im

 這個例子告訴咱們,嚴禁的說,實際上是在return 以後(並無出這個方法函數),finally 進行一個 return覆蓋了前者。

更加準確的表達:

try 中的 return 語句調用的函數先於 finally 中調用的函數執行,也就是說 return 語句先執行,

finally 語句後執行,因此,返回的結果是2。return 並非讓函數立刻返回,而是 return 語

句執行後,將把返回結果放置進函數棧中,此時函數並非立刻返回,它要執行 finally 語 句後才真正開始返回。

相關文章
相關標籤/搜索