2011-06-30 32 views
9

readFileMethod1中,IOException在拋出方法級別之前被明確地捕獲以確保finally塊被執行。但是,是否有必要抓住例外?如果我刪除catch block,如readFileMethod2所示,那麼finally塊也會被執行嗎?Java終於在方法級別阻塞並拋出異常

private void readFileMethod1() throws IOException { 
    try { 
     // do some IO stuff 
    } catch (IOException ex) { 
     throw ex; 
    } finally { 
     // release resources 
    } 
} 

private void readFileMethod2() throws IOException { 
    try { 
     // do some IO stuff 
    } finally { 
     // release resources 
    } 
} 
+0

我正要自己問這個問題。做出心理記錄。 – JohnMerlino

回答

7

無論是否捕獲IOException,finally仍會得到執行。如果你所有的catch塊都重新拋出,那麼在這裏就沒有必要了。

4

不,如果除了拋出它之外不打算做任何事情,則完全沒有必要捕捉異常。

是的,finally塊仍然會被執行。

2

不,沒有必要捕捉異常,除非你不能在你的方法中重新拋出異常。在您發佈的代碼中,readFileMethod2是遵循的正確選項。

1

終於被執行總是不考慮的是否引發異常與否。只有在執行try塊或catch塊時關閉JVM,那麼finally子句纔會被執行。同樣,如果執行try或catch代碼的線程被中斷或終止,即使應用程序整體繼續,finally塊也可能不會執行。