finally裏誤用return

今天看到一句話,finally 語句塊在 try 語句塊中的 return 語句之前執行,過了兩年突然對這句話感到有些困惑,以爲是執行完try之後有finally就會最終再執行finally,沒成想“finally 語句塊在 try 語句塊中的 return 語句之前執行”纔是真理。


package test;

public class TestFinallyReturn {
	public static void main(String[] args) {
		System.out.println(testFinally());
		
	}
	
	@SuppressWarnings("finally")
	private static int testFinally(){
		try {
			System.out.println("try");
			return 1;
		} catch (Exception e) {
			return -1;
		} finally{
			System.out.println("finally");
			return 0;
		}
		
	}

}
執行結果如下:

try
finally
0

由上可知,finally 語句塊在 try 語句塊中的 return 語句之前執行,一定要注意:

只有資源需要釋放的時候,纔去使用finally,不要一股腦的扔到finally裏面去處理,其他就扔給Java的垃圾回收機制處理吧,否則一不小心返回一個錯誤的結果就麻煩了。

發佈了84 篇原創文章 · 獲贊 52 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章