但是,java裡面不是可以保證finally一定會執行的麼,為什麼不可以在finally塊做return???
細細看道來:
debug一下這個函式,就會驚訝的發現, 裡面丟擲的異常會被finally吃掉。 這也就是為什麼會被警告的原因。
@SuppressWarnings("finally") private boolean isReturnWithinFinally() { try { if (true) throw new RuntimeException(); } finally { return true; // This hides the exception } }
那麼,下面這樣會不會ok呢?先把異常處理
public static void main(String[] args) { try{ throw new RuntimeException(); }catch(Exception e) { // } finally { return; } }
結論是:依舊不行。java裡面的異常分為可不獲和不可捕獲兩類,即便使用到catch塊,也會導致非捕獲的錯誤被finally吃掉。
因此,return一定要放到finally外面。