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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章