今天看到一句話,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的垃圾回收機制處理吧,否則一不小心返回一個錯誤的結果就麻煩了。