[英]Java finally block and throws exception at method level
在readFileMethod1
中, IOException
在將其拋出到方法級別之前被顯式捕獲,以確保執行finally
塊。 但是,是否有必要捕獲異常? 如果我刪除了readFileMethod2
中顯示的 catch 塊, finally
塊是否也會被執行?
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
}
}
finally
仍然會被執行,不管你是否捕獲了 IOException。 如果你的 catch 塊所做的只是重新拋出,那么這里就沒有必要了。
不,如果您除了拋出異常之外什么都不做,那么捕獲異常是完全沒有必要的。
是的,finally 塊仍然會被執行。
不,沒有必要捕獲異常,除非您不能在您的方法中重新拋出它。 在您發布的代碼中, readFileMethod2 是要遵循的正確選項。
finally 總是在 try catch 上下文中執行...有關更多信息,請檢查http://download.oracle.com/javase/tutorial/essential/exceptions/finally.ZFC35FDC70D5FC69D269883A822C7A53
無論是否拋出異常,最終都會執行。 只有在執行 try 塊或 catch 塊時 JVM 被關閉,才不會執行 finally 子句。 同樣,如果執行 try 或 catch 代碼的線程被中斷或殺死,即使應用程序作為一個整體繼續運行,finally 塊也可能不會執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.